Templates 多参数函数模板的别名

Templates 多参数函数模板的别名,templates,c++11,alias,Templates,C++11,Alias,我试图为一个多参数函数创建一个模板,然后为一个特定的实例化创建一个别名。从这个非常好的帖子: 我找到了适用于单个函数参数和单个模板参数的示例代码: #include <iostream> namespace Bar { void test() { std::cout << "Test\n"; } template<typename T> void test2(T const& a) { s

我试图为一个多参数函数创建一个模板,然后为一个特定的实例化创建一个别名。从这个非常好的帖子:

我找到了适用于单个函数参数和单个模板参数的示例代码:

#include <iostream>
namespace Bar
{
   void test()
   {
      std::cout << "Test\n";
   }

   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);
}
#包括
名称空间栏
{
无效测试()
{
std::cout
模板
void noBarTest(T const&a、T const&b)
{
}
void(&hh)(int const&,int const&)=noBarTest;//仅一次
int main(){
返回0;
}

类型参数
int
只需在
noBarTest

中指定一次,我看不出函数noBarTest有模板参数…模板。由于这是您的第一个问题,我假设您是堆栈溢出新手。因此,欢迎使用注释部分,如果您在理解解决方案时有任何困难由其他人提供。如果您找到有效的解决方案,您可以通过单击柜台下方的“检查”按钮来接受答案。这将有助于您下次提出问题时获得更多答复。@Arunmu,谢谢您的欢迎。我不确定何时使用注释,所以现在我知道了。您是对的,我没有使用模板代码片段中的放大。我在那里有它,但在编辑时丢失了它,因为我在尝试格式化东西。哇,这是一个愚蠢的错误。谢谢你指出!常量是必要的还是只是一个好的实践?对于本机类型,如char、int等,它没有什么区别。更好的传递值。对于用户定义的类型h的复制成本有点高,如果您不想在被调用的站点更改它们,最好通过常量引用传递,如果您想在被调用的站点更新类型的内容,最好通过引用传递。@Matt您会发现这篇文章很有趣:
void noBarTest(T const& a, T const& b)
{
    std::cout << "noBarTest: " << a << std::endl;
}

void(&hh)(int const&, int const&) = noBarTest<int, int>;
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;
}