gpt4 book ai didi

c++ - 模板类中的 Int 模板成员函数

转载 作者:太空狗 更新时间:2023-10-29 21:26:52 25 4
gpt4 key购买 nike

this 的重复问题.

我有这样一个类:

template <class T>
class foo {
public:

foo(){}

template <int S>
void bar (){}

}

如果调用这个类:

int main(){
foo<float> m;
m.bar<1>();
}

它给出了错误:

error: expected primary-expression before ')' token

再次弃用:

我的代码是:

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

我收到错误:

A bound member function may only be called

但是,如果我将 bar 函数包装成类似 void bar1(){return bar<1>();} 的函数,它就可以工作。我知道如果在编译时不知道 T,它就不会编译。但我不知道为什么编译器不够聪明,无法找出 f.bar<1> 中的 1 是静态的?

谢谢!

最佳答案

因为在解析测试函数时 T 参数是未知的,编译器无法确定 m.bar 是什么表达式是,因此假定它是一个非模板变量。 m.bar<1>()因此被解析为 (m.bar<1)>() ,最后一位是非法的。解决方法是明确说明 bar是一个模板:

foo<T> m;
m.template bar<1>();

关于c++ - 模板类中的 Int 模板成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10365796/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com