template typedef C ++ 11

时间:2014-08-30 13:31:39

标签: templates c++11 typedef using

我试图使用C ++ 11的“using =”语法来键入一个模板化的比较函数。然后我定义了一个模板化函数,并希望将它分配给“ComparisonFunction”类型的comparisonFunc。

  template<typename ValueType> using ComparisonFunction = bool (*)
                 (ValueType const & val1, ValueType const & val2);

    template<typename ValueType>
    bool equalFunction(ValueType const & val1, ValueType const & val2) {
        return val1==val2;
    }

    template<typename ValueType>
    ComparisonFunction<ValueType> comparisonFunc = equalFunction<ValueType>;   //Error is here

    int main()
    {

    }

前几行有效,但声明equalFunc(甚至没有赋值)会产生错误

error: template declaration of 'bool (* equalFunc)(const ValueType&, const ValueType&)

我在此错误中找到的所有内容都与C ++ 03相关,其中不存在“using =”语法。

提前致谢

2 个答案:

答案 0 :(得分:3)

您的声明

template<typename ValueType>
ComparisonFunction<ValueType> comparisonFunc = equalFunction<ValueType>;

是一个变量模板,因为声明适用于变量comparisonFunc,而不是类型或函数。 C ++ 14允许变量模板,但在C ++ 11中没有这样的东西。

答案 1 :(得分:0)

由于equalFunction的每个实例化都需要不同的函数指针,因此可以使ComparisonFunction为仿函数。正如您所说,C ++ 03中不存在模板别名,因此您的最终代码为:

template<typename ValueType>
bool equalFunction(ValueType const & val1, ValueType const & val2) {
    return val1==val2;
}

template <typename ValueType>
struct ComparisonFunction
{
    bool operator()(ValueType const & val1, ValueType const & val2)
    {
        return equalFunction(val1, val2);
    }
};