【发布时间】:2012-04-28 17:21:06
【问题描述】:
this的重复问题。
我有这样的课:
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();} 的东西,它会起作用。我知道如果在编译期间不知道 T,它将无法编译。但是我不知道为什么编译器不够聪明,无法确定 f.bar 中的 1 是静态的?
谢谢!
【问题讨论】:
-
我认为您可能遗漏了部分错误消息——这没有任何意义。
-
请将失败的程序缩减为最短的完整程序,但仍然失败。您可能会在此过程中发现您的解决方案。如果没有,请在您的问题中发布 short(提示:它应该少于 20 行)、complete(我们应该能够尝试编译它)程序对于更多信息,请参阅sscce.org。
标签: c++ templates boost member boost-test