微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我有以下代码
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)是一个有效的表达式.这有点破坏了我的代码中的一些可能性.我的问题:

>为什么我需要指定模板参数?
>我如何解决这个限制? (允许C 11或C 14).

(顺便说一句:我目前正在使用Visual Studio 2010,如果我将< T>退出,我会得到错误C2896.)

解决方法

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

F1< T>是一个函数,所以它可以传递.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐