在类模板中访问enum时避免重复使用模板形参
Avoid repeating the template parameter for accessing enum in class template
考虑一个实现容器的类模板,该容器包含选择存储位置的选项。
template<class T>
class Container {
public:
enum StorageOption {A,B};
Container(StorageOption opt_): option(opt_) {}
private:
StorageOption option;
};
这里选择StorageOption
作为成员,因为它只在类中使用。
现在,要实例化类,我需要重复模板参数,如:
{
Container<int> c( Container<int>::A );
}
是否有一种方法可以避免重复参数,同时使StorageOption
成为成员,或者是否有更好的方法实现该选项?
通常通过在基类中定义它来实现。
class ContainerBase {
public:
enum StorageOption {A,B};
};
template<class T>
class Container : public ContainerBase{
public:
Container(StorageOption opt_): option(opt_) {}
private:
StorageOption option;
};
Container<int> c( ContainerBase::A );
我自己一直在与这个问题作斗争,我真的不喜欢对基类的需求,也不喜欢在想要使用枚举类时需要重复基类说明符的方式。我想到了这个解决方案:
namespace FuncEnum{
enum class FuncNeighbor{
FLOOR, CEILING, SELF
};
enum class FuncDirection{
BACK, FRONT, BACKNFRONT
};
enum class FuncVar{
X, Y
};
} using namespace FuncEnum;
template<typename... Types>
class Func {};
这样你就可以用最小的规格拥有全局可用的枚举类。碰撞不太可能发生在<类昵称> <</p> 类昵称>
相关文章:
- 使用mem_fun_ref if成员函数需要多个形参
- 通过类的模板形参特化成员模板结构
- 非类型引用形参/实参
- 哪个模板形参在boost::shared_ptr构造函数中使用一个原始指针
- 如何确保迭代器模板形参与模板类的模板形参具有相同的数据类型
- 如何在编译时通过模板形参默认值的名称/指针获取函数的类型
- c++:候选模板被忽略:模板形参显式指定的参数无效
- c++中作为形参的指针
- 哪种方法更适合为函数提供编译时间常数?函数实参与模板形参
- 包含void*结构的函数的Const正确性和形参
- 传递boost::函数,该函数接受一个模板实参作为默认为NULL的形参
- 将右值引用形参强制转换为右值引用
- 给引用形参赋值使对象无效
- 当实参是初始化列表而形参是引用时,重载解析
- const整型模板形参的条件
- 访问没有模板参数的嵌套模板形参
- 使用传入的字符串形参来访问类型中的内容
- 检查模板形参是否有随机访问迭代器
- 如何访问const引用形参的值
- 在类模板中访问enum时避免重复使用模板形参