对于带有两个模板变量的模板化类,是否可以使用一个var来引用另一个变量?

时间:2016-05-29 16:04:36

标签: c++ templates

我正在寻找一种从实际类型B和C中引用A的方法。在下面的代码中,您看到我的第一个倾向是尝试初始化它。我尝试过的其他尝试是使用完美转发,继承并向B和C添加更多模板参数。有人可以建议前进的路径吗?是否有新的结构可能会有所帮助?我关闭还是不可能?

struct D {};
struct E {};

template< typename U1 > 
struct B 
{
  B() : u1(???)
  U1& u1; // how to reference A's t variable?
};

template< typename U2 > 
struct C 
{ 
  C() : u2(???)
  U2& u2; // how to reference A's t variable?
};

template< typename T, typename U >
struct A
{
  T t;
  U u;
};

int main()
{
  A< D, B< D > > a1;

  A< E, C< E > > a2;

  return 0;
}

1 个答案:

答案 0 :(得分:1)

我认为OP想要的是模板模板参数 这是他的代码一经审查:

#include<memory>

struct D {};
struct E {};

template< typename U > 
struct B 
{
    B(std::shared_ptr<U> v) : u{v} {}
    std::shared_ptr<U> u;
};

template< typename U > 
struct C 
{ 
    C(std::shared_ptr<U> v) : u{v} {}
    std::shared_ptr<U> u;
};

template< typename T, template<typename> typename U >
struct A
{
    A(): t{std::make_shared<T>()}, u{t} {}
    std::shared_ptr<T> t;
    U<T> u;
};

int main()
{
    A< D, B > a1;
    A< E, C > a2;
    return 0;
}