重复这个问题。
我有这样的课:
template <class T>
class foo {
public:
foo(){}
template <int S>
void bar (){}
}
如果这个类被调用:
int main(){
foo<float> m;
m.bar<1>();
}
它给出了错误:
错误:“)”标记之前的预期主表达式
再次弃用:
我的代码是:
#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MAIN
#include <boost/mpl/list.hpp>
#include <boost/test/unit_test.hpp>
#include <boost/test/test_case_template.hpp>
using namespace boost::unit_test;
#include "foo.hpp"
BOOST_AUTO_TEST_SUITE();
typedef boost::mpl::list<char, int> test_types;
BOOST_AUTO_TEST_CASE_TEMPLATE(test_Mat_constructor_hwd, T, test_types){
foo<T> m;
m.bar<1>();
}
BOOST_AUTO_TEST_SUITE_END()
然而,这不会编译,因为 BOOST_AUTO_TEST_CASE_TEMPLATE 正在做一些奇怪的事情......
不推荐使用以下文本:
但是,当我使用以下方法调用该函数时:
foo f;
f.bar<1>();
我收到错误消息:
绑定的成员函数只能被调用
但是,如果我将 bar 函数包装成类似 void bar1(){return bar<1>();} 的东西,它会起作用。我知道如果在编译期间不知道 T,它将无法编译。但我不知道为什么编译器不够聪明,无法确定 f.bar<1> 中的 1 是静态的?
谢谢!