注册 登录
编程论坛 C++教室

模板类创建对象的模板成员函数调用问题

leeco 发布于 2023-01-17 13:23, 1087 次点击
程序代码:

#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);

这是为什么呢,似乎不能使用模板类创建的对象的模板成员函数。
      |
2 回复
#2
rjsp2023-01-17 14:52
你用什么编译器?改为 return CAST_T().template cast<R>(t); 试试
#3
leeco2023-01-17 16:04
以下是引用rjsp在2023-1-17 14:52:33的发言:

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


牛啊,解决了,我用的g++ 9.4 用C++17标准编译
1