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;
}