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();