作为一个简化的例子,如果我有类
template <class T, class U> class ProcessEvent
{
public:
ProcessEvent(T* t) : var1(t) { var2 = new U; }
Process() { var2->Process(var1); }
private:
T* var1;
U* var2;
};
class Foo
{
/*data*/
};
class FooProcessor
{
void Process(Foo* foo) {/*functionality*/}
};
class Bar
{
/*data*/
};
class BarProcessor
{
void Process(Bar* bar) {/*functionality*/}
};
Run Code Online (Sandbox Code Playgroud)
所以ProcessEvent类可以有两组不同的模板类型,
ProcessEvent<Foo, FooProcessor>
ProcessEvent<Bar, BarProcessor>
Run Code Online (Sandbox Code Playgroud)
但是,第二个模板类型FooProcessor和BarProcessor直接由第一个模板类型暗示,并且是用户不关心的实现细节.我的目标是拥有与上面相同的功能,但让ProcessEvent只采用一个模板参数,Foo或Bar.除了通过ProcessEvent的专业化,这可以做到吗?
我将假设你为了清晰而简化,并且真正使用智能指针或者至少正确地管理内存.
最简单的方法是在第一个类中使用typedef:
class Foo
{
typedef FooProcessor Processor;
// Stuff.
};
Run Code Online (Sandbox Code Playgroud)
然后在你的模板中摆脱U并使用typename T::Processor.
| 归档时间: |
|
| 查看次数: |
176 次 |
| 最近记录: |