在模板参数中更改bool值的类型
Change type on bool value in template argument
我正在逐步学习模板,我认为这是我当前项目需要做的最后一件事:
template < typename Object, bool Shared>
class Foo {
private:
struct SubFoo {
//if Shared == true -> FooShared foo;
//if Shared == false -> FooBasic foo;
??? foo;
Object data;
};
};
我知道这不会比MagicType foo;
容易工作,因此不必担心修改代码。我没有C 限制(G 6.2,我想知道如何获得G 7),因此欢迎概念。
您可以在#include <type_traits>
中使用std::conditional
模板:
typename std::conditional<Shared, FooShared, FooBasic>::type foo;
如评论中所述,C 14包括一个易于使用的变体std::conditional_t
作为别名:
std::conditional_t<Shared, FooShared, FooBasic> foo;
示例代码:
#include <iostream>
#include <type_traits>
struct FooShared
{
FooShared() { std::cout << "FooSharedn"; }
};
struct FooBasic
{
FooBasic() { std::cout << "FooBasicn"; }
};
template <bool shared>
class foo
{
//typename std::conditional<shared, FooShared, FooBasic>::type mytype;
std::conditional_t<shared, FooShared, FooBasic> mytype;
};
int main(int argc, char* argv[])
{
foo<true> a;
foo<false> b;
}
相关文章:
- 为什么在这种情况下,bool 类型的输出等于 0?
- 将“nullptr”分配给“bool”类型.哪个编译器是正确的
- 在 lambda 表达式中自动推导出的类型是什么,用于修改 bool 类型的向量(特殊容器)
- 使用类型"bool"类型的值初始化类型"int &"(非常量限定)的引用是否是一种黑客?
- 为什么 WinAPI 对 BOOL 类型使用 int(32 位)
- 我可以在C++获得非特化的载体<bool>类型吗?
- unordered_map的默认构造函数,bool类型将设置为false
- 这是自动读写bool类型的正确方法吗?
- 当使用自定义trait和bool类型的c++11枚举时,clang的编译错误
- 为什么在c++中函数指针地址以bool类型打印
- c++ ! !转换为bool类型
- 用于排序容器的隐式转换为显式bool类型
- bool类型变量如何存储在内存中?(c++)
- 带bool类型的字符串初始化
- diab 5.7编译器中的逻辑与运算符返回非bool类型
- 为什么包含未使用的bool类型会影响char类型的引用?
- 结构错误表达式必须为bool类型
- 我可以使用' bool '类型或不透明指针指向导出到c的c++函数中的类吗?
- 为什么sscanf不能正常工作与bool类型
- 从布尔值构造具有底层"bool"类型的枚举?