模板类专业化 - '操作'没有在这个范围内宣布

时间:2016-03-26 16:40:48

标签: c++ templates

我正在为不同类型创建容器模板。其中一个类型是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;
}

2 个答案:

答案 0 :(得分:0)

当然,在您的班级专业化MepVector<unique_ptr<T>, U>中,您忘记定义Operation typedef。

答案 1 :(得分:-1)

使用"typedef void (U::*Operation)()"代替"typedef void (U::*Operation)()" ..应该有空格......