首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用枚举模板参数编译时间类模板选择

用枚举模板参数编译时间类模板选择
EN

Stack Overflow用户
提问于 2017-07-22 08:14:48
回答 1查看 487关注 0票数 1

我试图根据给定的枚举模板参数(store_type)选择类模板。现在我实例化了一个使用这个类的类,但是它似乎总是尝试实例化这个类的basic_store。

代码语言:javascript
复制
enum store_type
{
    none,
    basic,
    lockless,
};

template<class T, store_type S = none, typename = void>
struct get_store_type
{
};

template<class T>
struct get_store_type<T, basic,
typename std::enable_if<!std::is_abstract<T>::value>::type>
{
    using store_type = typename basic_store<T>;
};

template<class T>
struct get_store_type<T, lockless>
{
    using store_type = typename lockless_store<T>;
};

template<typename T, store_type S>
class client
{
public:
    using my_store_type = typename get_store_type<T, S>::store_type;
}

//Tries to instantiate a basic store... which is not allowed.
client<SomeAbstractType, lockless> something;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-22 09:02:54

您在专门化过程中忘记了第3模板参数。

代码语言:javascript
复制
template<class T> struct get_store_type<T, lockless, void >
                                                     ^^^^

以下代码的输出为1、2和3

代码语言:javascript
复制
#include <iostream>

enum store_type { none, basic, lockless };

template<class T, store_type S = none, typename = void>
struct get_store_type
{ int a = 1; };

template<class T>
struct get_store_type<T, basic, typename std::enable_if<!std::is_abstract<T>::value>::type>
{ int b = 2; };

template<class T>
struct get_store_type<T, lockless, void > 
{ int c = 3; };

struct Any{};

int main( void )
{
    get_store_type<int> storeA;
    get_store_type<Any, basic> storeB;
    get_store_type<int, lockless> storeC;

    std::cout << storeA.a << std::endl;
    std::cout << storeB.b << std::endl;
    std::cout << storeC.c << std::endl;    

    return 0;
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45252290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档