【发布时间】:2014-08-18 11:40:04
【问题描述】:
我有这个模板方法:
template <class SomeLhs, class SomeRhs,
ResultType (SomeLhs::*callback)(SomeRhs&)>
void Add() {
struct Local {
static ResultType Trampoline(BaseLhs& lhs, BaseRhs& rhs) {
return (static_cast<SomeLhs&>(lhs).*callback)(static_cast<SomeRhs&>(rhs));
}
};
_back_end.template Add<SomeLhs,SomeRhs>(&Local::Trampoline);
}
目前我这样称呼它:
tracker.Add<Quad, Multi, &Quad::track>();
tracker.Add<Quad, Singl, &Quad::track>();
tracker.Add<Sext, Multi, &Sext::track>();
...
它工作正常,但我不想重复两次类名称SomeLhs。有没有办法避免这种情况?
对于可能已经认识它的人:是的,这与 Alexandrescu 的 BasicFastDispatcher 有关,特别是我正在编写一个与成员函数一起操作的前端。
【问题讨论】:
-
我认为不一定总是“跟踪”功能!?您如何在 Add 中使用回调?
-
@WernerHenze 原则上它可能是另一个功能,我想保留这种可能性。 Add() 与 Alexandrescu 的几乎相同(现代 C++ 设计的第 244 页),只是有一些奇怪的语法来操作成员函数(我在问题中添加了它)。
标签: c++ templates c++11 methods