C++ 更改模板参数中布尔值的类型
我正在一步一步地学习模板,我认为这是我当前项目最不需要做的事情:C++ 更改模板参数中布尔值的类型,c++,templates,c++-concepts,C++,Templates,C++ Concepts,我正在一步一步地学习模板,我认为这是我当前项目最不需要做的事情: template < typename Object, bool Shared> class Foo { private: struct SubFoo { //if Shared == true -> FooShared foo; //if Shared == false -> FooBasic foo; ??? foo;
template < typename Object, bool Shared>
class Foo {
private:
struct SubFoo {
//if Shared == true -> FooShared foo;
//if Shared == false -> FooBasic foo;
??? foo;
Object data;
};
};
template
福班{
私人:
结构子对象{
//如果共享==true->foo共享foo;
//如果共享==false->FooBasic foo;
??富;
对象数据;
};
};
我知道这不会像magictypefoo代码>所以不必担心修改代码。
我没有C++限制(G++ 6.2,我不知道如何得到G++ 7),所以即使是概念也欢迎。
示例代码:
#include <iostream>
#include <type_traits>
struct FooShared
{
FooShared() { std::cout << "FooShared\n"; }
};
struct FooBasic
{
FooBasic() { std::cout << "FooBasic\n"; }
};
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;
}
#包括
#包括
结构共享
{
FooShared(){std::cout您可以在以下位置使用该模板:
示例代码:
#include <iostream>
#include <type_traits>
struct FooShared
{
FooShared() { std::cout << "FooShared\n"; }
};
struct FooBasic
{
FooBasic() { std::cout << "FooBasic\n"; }
};
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;
}
#包括
#包括
结构共享
{
食物共享(){std::cout-Oh-nice one,你知道概念中是否有类似的东西吗?是的-删除。我从另一段代码中复制和修改。std::conditional_t
使它在C++14中更易于使用。噢,nice one,你知道概念中是否有类似的东西吗?是的-删除。我复制了一个从另一段代码中修复。std::conditional\u t
使它在C++14中使用起来稍微容易一些。
#include <iostream>
#include <type_traits>
struct FooShared
{
FooShared() { std::cout << "FooShared\n"; }
};
struct FooBasic
{
FooBasic() { std::cout << "FooBasic\n"; }
};
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;
}