gpt4 book ai didi

c++ - 派生类的成员函数不关心模板参数

转载 作者:搜寻专家 更新时间:2023-10-31 01:31:07 25 4
gpt4 key购买 nike

我想在向上或向下位置模拟一串粒子。为此我做了一个继承自bitset的类。看起来像:

#include <bitset>
using namespace std;

template <size_t N>
class State : public bitset<N> {
public:
State<N>();
State<N>(size_t b);

long int E();
private:
size_t length;
};

template<unsigned long N>
State<N>::State()
: std::bitset<N>(), length(N)
{}

template<unsigned long N>
State<N>::State(size_t b)
: std::bitset<N>(b), length(N)
{}

一旦使用特定长度实例化此类对象,我想找到与此类对象关联的能量。我想做这个

#include "state.h"

long int State::E(){
long int e = 0;
for (size_t i = 1; i != length; ++i)
e += (test[i] == test[i - 1]) ? 1 : -1;

return e;
}

我收到错误

state/state.cc:3:10: error: ‘template<long unsigned int N> class State’ used without template parameters
long int State::E(){
^~~~~
state/state.cc: In function ‘long int E()’:
state/state.cc:5:27: error: ‘length’ was not declared in this scope
for (size_t i = 1; i != length; ++i)
^~~~~~
state/state.cc:6:11: error: ‘test’ was not declared in this scope
e += (test[i] == test[i - 1]) ? 1 : -1;
^~~~

我理解这意味着编译器无法识别 E()由于缺少模板参数,它是我的类的成员函数。但是,我希望有一种方法可以调用 s.E()State<20> 上对象为例。因此,一旦对象被实例化,我希望能够调用 E()无需再次指定大小。这可能吗?提前致谢!

最佳答案

这里有两个问题:定义成员函数E()类模板 State<N> ,并访问 test() 依赖基类的成员函数bitset<N> .

template<size_t N>
long int State<N>::E(){
long int e = 0;
for (size_t i = 1; i != length; ++i)
e += (this->test(i) == this->test(i - 1)) ? 1 : -1;
}

注意 template<size_t N>State<N>以及 this->test 前.参见 this Q&A以获得详细的解释。

最后注意:还要小心:它是 test() (括号)和 operator[] (括号)在 std::bitset .

关于c++ - 派生类的成员函数不关心模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46365444/

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