避免重复模板参数类模板访问枚举
问题描述:
考虑实现一种容器,其包括用于选择其存储位置的选项的类模板。避免重复模板参数类模板访问枚举
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 {};
这样你就可以有最小规范的全局可用枚举类。这是不太可能的碰撞之间<类的绰号> <枚举类的名字恰好>但即使有,using声明应该影子(?)无论全局标识符约干涉(在一个特殊的情况下,可以再次与其他使用被撤销宣言)。
我看不出hmjd的想法可能可能工作。 – 2013-03-01 14:57:49
你有没有尝试过这种'使用类型=容器 :: StorageOption'? –
2016-08-10 06:27:58
有一个丑陋的解决方案,您可以将该枚举从类中取出并命名为ContainerStorageOption。 – 2017-04-13 07:48:19