繁体   English   中英

为什么模板函数的模板在Visual C ++中无效

[英]Why The Template of template function is invalid in Visual C++

我发现在Visual C ++ 2013中使用模板函数的模板是无效的。首先,我定义了模板函数指针(用于将T转换为字符串):

template<class T>
struct TemplateFn
{
    typedef string(*T2STRING)(T);
};

然后我定义了另一个模板函数

 template<class T>
 vector<string> Vector2StringVector(vector<T> a_vt, TemplateFn<T>::T2STRING a_fn)
 {
    auto vtString = vector<string>();
    for (auto i = a_vt.begin(); i != a_vt.end(); i++)
    {
        vtString.push_back(a_fn(*i));
    }
    return vtString;
 }

编译器将输出一个错误:C2061语法错误:IDENTIFIER'T2STRING'最后,我将代码更改为以下代码:

 template<class T>
 vector<string> Vector2StringVector(vector<T> a_vt, string(*T2STRING)(T))
 {
     auto vtString = vector<string>();
     for (auto i = a_vt.begin(); i != a_vt.end(); i++)
     {
         vtString.push_back(T2STRING(*i));
     }
     return vtString;
 }

没关系。 因此,它是如此与我联系。 有没有一种优雅的方式可以使用类似于TemplateFn :: T2STRING的方式? 谢谢

T2STRING是一个依赖的嵌套类型,因此您应该给编译器一个提示。 将函数标头更改为

 vector<string> Vector2StringVector(vector<T> a_vt, typename TemplateFn<T>::T2STRING a_fn)

顺便说一句,您是否不尝试重新实现std::transform (以及其他std::back_inserter )?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM