添加/删除具有模板参数的数据成员
Add/Remove data members with template parameters?
考虑以下代码:
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
)?
可以使用条件基类:
struct BaseWithVariable { int addedVariable; };
struct BaseWithoutVariable { };
template <bool AddMembers> class MyClass
: std::conditional<AddMembers, BaseWithVariable, BaseWithoutVariable>::type
{
// etc.
};
首先,您的代码不会为MyClass<false>
编译。enable_if
特性对于推导的参数很有用,而对于类模板参数则不有用。
其次,以下是如何控制会员:
template <bool> struct Members { };
template <> struct Members<true> { int x; };
template <bool B> struct Foo : Members<B>
{
double y;
};
相关文章:
- 用于访问容器<T>数据成员的正确 API
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 数据成员SFINAE的C++17测试:gcc vs clang
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- 如何在c++中定义以struct为数据成员的类中的构造函数
- 静态数据成员模板专用化的实例化点在哪里
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 使用指针访问数组中的对象数据成员
- 如果参数与数据成员的参数同名,该怎么办?
- 自动模板参数、数据成员和恒常性
- 将私有数据成员作为默认参数传递给该类的公共方法时出错
- 使用 std::function 作为具有任意数量参数的数据成员
- 类数据成员指针的非类型模板参数包无法使用 gcc 编译
- 将非静态数据成员作为默认参数传递给方法
- 如何在不将类数据成员作为参数传递的情况下访问线程中的类数据成员
- 添加/删除具有模板参数的数据成员
- 使用结构非类型可变参数模板参数初始化结构的字符串数据成员
- 如何通过制作模板参数来更改数据成员的类型?
- 如何在另一个类中创建类的参数化构造函数作为数据成员
- 设置与设置函数参数同名的私有数据成员