如果模板参数中的某些条件为真,我想在类模板中声明成员变量。我可以使用嵌套类作为容器,但是在这种情况下不可能进行显式的专门化。
我正在尝试这样的东西:
enum class VarPolice { Declare, DontDeclare };
template<VarPolice vp = VarPolice::Declare>
class MyClass
{
struct EmptyStruct {};
struct VarSaverStruct { int MyVar; };
using VarSaver = typename std::conditional<vp == VarPolice::Declare, VarSaverStruct, EmptyStruct>::type;
VarSaver saver;
}
因此,我可以将
MyVar
用作saver.MyVar
有没有办法在不使用EmptyStruct的情况下进行可选的变量声明?
可以使用C++ 17。
最佳答案
是的,您也可以吃蛋糕。而是从正确的类型继承,并依靠空的基础优化。
enum class VarPolice { Declare, DontDeclare };
struct EmptyStruct {};
struct VarSaverStruct { int MyVar; };
template<VarPolice vp = VarPolice::Declare>
class MyClass : std::conditional_t<vp == VarPolice::Declare,
VarSaverStruct, EmptyStruct>
{
};
如果标准库实现是无状态的,则它们自己依靠它来“存储”分配器而不会占用空间。
关于c++ - 模板中的可选变量声明,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48294873/