1

我有一个类,它有一个公共的模板方法。这个类有两种行为策略,我想通过类模板传递。

template<class Strategy>
class SomeClass {
public:
    template<class B>
    void ProcessType(){}
};

// And do something like this:
SomeClass<Strategy1> sc();
sc.ProcessType<SomeClassType>();
sc.ProcessType<SomeClassType2>();

SomeClass<Strategy2> sc2();
sc2.ProcessType<SomeClassType>();
sc2.ProcessType<SomeClassType2>();

但是这段代码无法编译。我需要保持这样的用法(仅通过策略进行操作)。

4

1 回答 1

4

这就是问题:

SomeClass<Strategy1> sc();

这是一个被调用函数的声明sc,它不带参数并返回一个SomeClass<Strategy1>. 这通常被称为令人烦恼的解析(但不是令人烦恼的解析)。你想要的是:

SomeClass<Strategy1> sc;
于 2013-02-22T10:36:48.300 回答