我正在为不同类型创建容器模板。其中一个类型是shared_ptr到object。因此,为了避免重复的操作数代码 - >和。调用对象方法。我试图做部分模板设计,但我得到了这个错误:
error: variable or field 'doOperation' declared void
void MepVector<unique_ptr<T>, U>::doOperation(Operation operation)
error: 'Operation' was not declared in this scope
代码:
template <typename T, typename U>
class MepVector
{
private:
typedef void(U::*Operation)();
public:
MepVector() {}
void doOperation(Operation operation);
void add(T t)
{ mepVector_.push_back(t); }
void show()
{ doOperation(&U::show); }
private:
std::vector<T> mepVector_;
};
template <typename T, typename U>
void MepVector<unique_ptr<T>, U>::doOperation(Operation operation)
{
for(auto& t : mepVector_)
{
(t->*operation)();
}
}
template <typename T, typename U>
void MepVector<T, U>::doOperation(Operation operation)
{
for(auto& t : mepVector_)
{
(t.*operation)();
}
}
class A
{
public:
A() {};
void show()
{ cout<<"udalo sie!"<<endl; }
};
int main() {
MepVector<A,A> myVector;
myVector.add(A());
myVector.show();
return 0;
}
答案 0 :(得分:0)
当然,在您的班级专业化MepVector<unique_ptr<T>, U>
中,您忘记定义Operation
typedef。
答案 1 :(得分:-1)
使用"typedef void (U::*Operation)()"
代替"typedef void (U::*Operation)()"
..应该有空格......