代码之家  ›  专栏  ›  技术社区  ›  Vincent

是否添加/删除具有模板参数的数据成员?

  •  35
  • Vincent  · 技术社区  · 12 年前

    请考虑以下代码:

    template<bool AddMembers> class MyClass
    {
        public:
            void myFunction();
            template<class = typename std::enable_if<AddMembers>::type> void addedFunction();
    
        protected:
            double myVariable;
            /* SOMETHING */ addedVariable;
    };
    

    在此代码中,模板参数 AddMembers 允许在类 true 。为此,我们使用 std::enable_if

    我的问题是:对于数据成员变量,同样的可能(也许有技巧)吗?(以这样的方式 MyClass<false> 将有1个数据成员( myVariable )以及 MyClass<true> 将有2个数据成员( myVariable(我的变量) addedVariable )?

    2 回复  |  直到 12 年前
        1
  •  37
  •   James McNellis    12 年前

    可以使用条件基类:

    struct BaseWithVariable    { int addedVariable; };
    struct BaseWithoutVariable { };
    
    template <bool AddMembers> class MyClass
        : std::conditional<AddMembers, BaseWithVariable, BaseWithoutVariable>::type
    {
        // etc.
    };
    
        2
  •  33
  •   Kerrek SB    12 年前

    首先,您的代码不会编译 MyClass<false> 这个 enable_if 特性对 推断的 参数,而不是类模板参数。

    其次,以下是如何控制成员:

    template <bool> struct Members { };
    
    template <> struct Members<true> { int x; };
    
    template <bool B> struct Foo : Members<B>
    {
        double y;
    };