我试图使用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 =”语法。
提前致谢
答案 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);
}
};