标题:模板类创建对象的模板成员函数调用问题
只看楼主
leeco
Rank: 4
等 级:贵宾
威 望:10
帖 子:1026
专家分:177
注 册:2007-5-10
结帖率:50%
已结贴  问题点数:20 回复次数:2 
模板类创建对象的模板成员函数调用问题
程序代码:
#include <bits/stdc++.h>
// #include <boost/lexical_cast.hpp>

using namespace std;

class Caster1 {
public:
    template<typename R, typename T>
    R cast(const T& t) {
        stringstream ss;
        ss << t;
        R r;
        ss >> r;
        return r;
    }
};

// class Caster2 {
// public:
//     template<typename R, typename T>
//     R cast(const T& t) {
//         return boost::lexical_cast<R>(t);
//     }
// };

template<typename CAST_T>
class Test {
public:
    template<typename R, typename T>
    R cast(const T& t) {
        return CAST_T().cast<R>(t); // 此处会报错
    }
};


int main() {
    cout << Caster1().cast<double>("3.14") << endl;
    // cout << Caster2().cast<double>("3.14") << endl;

    Test<Caster1> test;
    cout << test.cast<double>("3.14") << endl;
    
    return 0; 
}


报错为
test_template.cpp: In member function ‘R Test<CAST_T>::cast(const T&)’:
test_template.cpp:31:31: error: expected primary-expression before ‘>’ token
   31 |         return CAST_T().cast<R>(t);

这是为什么呢,似乎不能使用模板类创建的对象的模板成员函数。
      |
搜索更多相关主题的帖子: 模板 return template const Test 
2023-01-17 13:23
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:20 
你用什么编译器?改为 return CAST_T().template cast<R>(t); 试试
2023-01-17 14:52
leeco
Rank: 4
等 级:贵宾
威 望:10
帖 子:1026
专家分:177
注 册:2007-5-10
得分:0 
以下是引用rjsp在2023-1-17 14:52:33的发言:

你用什么编译器?改为 return CAST_T().template cast<R>(t); 试试


牛啊,解决了,我用的g++ 9.4 用C++17标准编译
2023-01-17 16:04



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-511129-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.393455 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved