Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;11模板元编程-在编译时声明类型特征(类似开关的情况)_C++_Templates_C++11_Template Meta Programming - Fatal编程技术网

C++ c++;11模板元编程-在编译时声明类型特征(类似开关的情况)

C++ c++;11模板元编程-在编译时声明类型特征(类似开关的情况),c++,templates,c++11,template-meta-programming,C++,Templates,C++11,Template Meta Programming,我正在尝试实现一个类选择器,这个类的功能是在编译时选择一个类的特定特性。但我发现另一个要求是不需要实现静态函数。我在元编程方面的经验太少了 #include <stdio.h> #include <iostream> template<class OptionSelected> struct ContainnerValue { typedef OptionSelected selectedValue; typename selectedVa

我正在尝试实现一个类选择器,这个类的功能是在编译时选择一个类的特定特性。但我发现另一个要求是不需要实现静态函数。我在元编程方面的经验太少了

#include <stdio.h>
#include <iostream>


template<class OptionSelected>
struct ContainnerValue
{
    typedef OptionSelected selectedValue;
    typename selectedValue value;
};

////Enum definition
enum class EOptions
{
    Option_One,
    Option_two
};
////trait base definition
template<EOptions>
struct SelectorClass{};

template<>
struct SelectorClass<EOptions::Option_One>
{
    void printClass()
    {
        std::cout<<"Class Selection One"<<std::endl;
    }
};
typedef SelectorClass<EOptions::Option_One> Option_One;

template<>
struct SelectorClass<EOptions::Option_two>
{
   void printClass()
    {
        std::cout<<"Class Selection two"<<std::endl;
    }
};

typedef struct SelectorClass<EOptions::Option_two> Option_Two;

int main(void)
{
    ContainnerValue<Option_One>::value.printClass();
    printf("Hello World!\n");
    return 0;
}
#包括
#包括
模板
结构包含值
{
typedef选项Selected Selected Value;
typename selectedValue值;
};
////枚举定义
枚举类选项
{
方案一,
方案二
};
////特征基定义
模板
结构选择器类{};
模板
结构选择器类
{
void printClass()
{

std::cout我觉得这是一种非常复杂的方法来做你想做的事情,但无论如何,这里有一组最小的更改来实现这一点:更改以下行

typename selectedValue value;

void printClass()

ContainnerValue<Option_One>::value.printClass();
typename selectedValue值;
void printClass()
ContainerValue::value.printClass();

typedef selectedValue值;
静态void printClass()
ContainerValue::value::printClass();

也就是说,将
printClass
设置为
静态成员函数,并使用类名称后跟
,调用它,而不使用对象。

类型名称selectedValue
selectedValue;
不是静态数据成员;但是,您试图在此处引用它,就好像它是静态数据成员一样:e> ContainnerValue::value.printClass();
我已经尝试过这样做,但无法获得任何结果。那么,到底是什么问题?您可以编辑您的问题以添加新信息。
typedef selectedValue value;

static void printClass()

ContainnerValue<Option_One>::value::printClass();