这些值模板参数是否相同?

时间:2012-02-13 17:29:31

标签: c++ templates

template<typename std::list<int>::value_type value>
int silly()
{
    return value;
}

template<typename int value>
int silly2()
{
    return value;
}

template<int value>
int silly3()
{
    return value;
}

问题1&GT;是value_type std::list<int>的{​​{1}}吗?

问题2&GT;这三个int函数实际上是否相同?

2 个答案:

答案 0 :(得分:3)

首先,代码

template<typename int value>
    int silly2()
{
    return value;
}

不合法,因为不允许使用模板参数定义。您需要通过说template <int value>或通过说template <typename value>来通过类型参数对整数值进行参数化。在第一个模板中允许typename的原因是它使用typename的第二个含义,即接下来命名的类型。

除此之外,是的,(1)和(3)是相同的,因为C ++ ISO规范要求std::list<int>::value_typeint

希望这有帮助!

答案 1 :(得分:2)

答案1:是的,container::value_type是其所包含元素类型的typedef

答案2:您的silly2()生成不良,因为模板的非类型参数不需要typename,除非类型合格且依赖于某些类型参数

在你的第一个表格中:

template<typename std::list<int>::value_type value> //you don't require typename since qualified name value_type isn't dependent, so it's avoided by compiler I guess
int silly()