如何在类外使用模板参数名称?

时间:2017-04-08 06:17:10

标签: c++

我正在学习c ++。 我想使用模板参数名称,因为它在类外面。 我找不到最好的解决方案,但现在我使用“使用”声明。但是它不能使用相同的名称。  还有更好的解决方案吗?或者通过“使用”重新声明模板参数是否有良好的习惯或良好的命名?

以下代码是示例;它通过使用Type = T_TypeA重新声明T_TypeA,但我想在结构B中使用T_TypeA。

template <typename T_TypeA>
struct A {
    using Type = T_TypeA;
};

template <typename Object>
struct B {
    using Type = typename Object::Type;
    Type object = 3;
};

void test_using_for_template_parameter_name(void) {
    B<A<int>> b;
    std::cout << "value = " << b.object << std::endl;
}

2 个答案:

答案 0 :(得分:2)

  

以下代码是示例;它使用T_TypeA 重新声明Type = T_TypeA,但我想在结构B 中使用T_TypeA

模板参数名称仅在功能模板类模板中有用且可见,它们之外没有任何意义。所以:

template <typename T_TypeA>
struct A {
    using Type = T_TypeA;
};

T_TypeA此处仅用作实例化struct A时用作模板参数的类型的占位符名称。

这就是为什么我们需要typedef来为该类型的名称添加别名。因此,如果T_TypeA是您想要显示的名称:您可能希望:

template <typename TypeA>
struct A {
    using T_TypeA = TypeA;
};

答案 1 :(得分:1)

  

我想在结构B中使用T_TypeA。

我认为没有办法做到这一点。您最好的选择就是您已经完成的工作。

using Type = T_TypeA;

using Type = typename Object::Type;