如果模板参数中的某些条件为真,我想在类模板中声明成员变量。我可以使用嵌套类作为容器,但是在这种情况下不可能进行显式的专门化。

我正在尝试这样的东西:

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/

10-14 03:18