gpt4 book ai didi

c++ - 为什么我需要在这里指定模板函数的模板参数类型?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:02:44 25 4
gpt4 key购买 nike

我有以下代码:

template <typename T>
void f1( T t )
{
std::cout << "f1( " << t << " ) called." << endl;
}

template <typename T>
void f2( T t )
{
std::cout << "f2( " << t << " ) called." << endl;
}

template <typename F, typename T>
void call( F && f, T t )
{
f( t );
}

template <typename T>
void foo( T t )
{
call( f1<T>, t ); // Why is <T> necessary?
// f1(t) is a valid expression!
call( f2<T>, t );
}

void bar()
{
foo( 1 );
}

在函数中 foo()我需要指定模板参数,即使 f1(t)是一个有效的表达式。这有点破坏了我代码中的一些可能性。我的问题:

  1. 为什么需要指定模板参数?
  2. 我该如何解决这个限制? (允许使用 C++11 或 C++14)。

(顺便说一句:我目前使用的是 Visual Studio 2010,如果我将 <T> 排除在外,我会收到错误 C2896。)

最佳答案

f1不是一个函数,它是一个模板。您不能将模板作为函数参数传递。

f1<T>是一个函数,所以可以传递。

关于c++ - 为什么我需要在这里指定模板函数的模板参数类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17169498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com