| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 885 人关注过本帖
标题:模板类创建对象的模板成员函数调用问题
只看楼主 加入收藏
leeco
Rank: 4
等 级:贵宾
威 望:10
帖 子:1029
专家分: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
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:20 
你用什么编译器?改为 return CAST_T().template cast<R>(t); 试试
2023-01-17 14:52
leeco
Rank: 4
等 级:贵宾
威 望:10
帖 子:1029
专家分: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
快速回复:模板类创建对象的模板成员函数调用问题
数据加载中...
 
   



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

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