多参数函数模板的别名
我正在尝试为多参数函数创建一个模板,然后为特定实例化创建一个别名。 从这个非常好的帖子:
C ++ 11:如何别名一个函数?
我找到了适用于单个函数参数和单个模板参数的示例代码:
#include <iostream>
namespace Bar
{
void test()
{
std::cout << "Testn";
}
template<typename T>
void test2(T const& a)
{
std::cout << "Test: " << a << std::endl;
}
}
void (&alias)() = Bar::test;
void (&a2)(int const&) = Bar::test2<int>;
int main()
{
Bar::test();
alias();
a2(3);
}
当我尝试扩展为两个函数参数时:
void noBarTest(T const& a, T const& b)
{
std::cout << "noBarTest: " << a << std::endl;
}
void(&hh)(int const&, int const&) = noBarTest<int, int>;
我在Visual Studio中遇到这些错误:
错误C2440:'初始化':无法从'void(__cdecl *)(const T&,const T&)'转换为'void(__cdecl&)(const int&,const int&)'
智能感知:类型为“void(&)(const int&,const int&)”(不是const限定)的引用不能用类型为“”的值初始化
我以为我完全按照这个模式扩展到2个参数。
这是什么适当的语法?
template <typename T>
void noBarTest(T const& a, T const& b)
{
}
void(&hh)(int const&, int const&) = noBarTest<int>; // Only once
int main() {
return 0;
}
类型参数int
只需在noBarTest<int>
指定一次。
上一篇: alias for multi parameter function template
下一篇: copying constness in templates fails strangely based on type