C++;这类 我在C++中写了一些模板代码,我发现如果我能确定代码< >代码>这个代码,它会使代码更短/更好/更有用。我不想使用C++0x,因为代码要与较旧的编译器向后兼容。我也不想使用BOOST。我所拥有的是: struct MyLoop { template <class Param> void Run(int iterations, Context c) { MyUtility<MyLoop>::template WrapLoop<Param>(iterations, c); } }; struct MyLoop { template <class Param> void Run(int iterations, Context c) { MyUtility<decltype(*this)>::template WrapLoop<Param>(iterations, c); } };

C++;这类 我在C++中写了一些模板代码,我发现如果我能确定代码< >代码>这个代码,它会使代码更短/更好/更有用。我不想使用C++0x,因为代码要与较旧的编译器向后兼容。我也不想使用BOOST。我所拥有的是: struct MyLoop { template <class Param> void Run(int iterations, Context c) { MyUtility<MyLoop>::template WrapLoop<Param>(iterations, c); } }; struct MyLoop { template <class Param> void Run(int iterations, Context c) { MyUtility<decltype(*this)>::template WrapLoop<Param>(iterations, c); } };,c++,types,C++,Types,这样做的优点是不重复类的名称,整个过程可以隐藏在宏中(例如,一个名为DECLARE\u LOOP\u INTERFACE)。在C++03或更高版本中,没有BOOST,有没有办法做到这一点?我将在Windows/Linux/Mac上使用该代码 我知道语法很难看,这是一个研究代码。请不要介意。我认为这应该是可行的: template <class Param, class Loop> void Dispatcher(Loop *loop_valueIsNotUsed, int itera

这样做的优点是不重复类的名称,整个过程可以隐藏在宏中(例如,一个名为
DECLARE\u LOOP\u INTERFACE
)。在C++03或更高版本中,没有BOOST,有没有办法做到这一点?我将在Windows/Linux/Mac上使用该代码


我知道语法很难看,这是一个研究代码。请不要介意。

我认为这应该是可行的:

template <class Param, class Loop>
void Dispatcher(Loop *loop_valueIsNotUsed, int iterations, Context c)
{
  MyUtility<Loop>::template WrapLoop<Param>(iterations, c);
}

// Usage:

struct MyLoop
{
  template <class Param>
  void Run(int iterations, Context c)
  {
    Dispatcher<Param>(this, iterations, c);
  }
};
模板
无效调度程序(循环*循环值未使用,整数迭代,上下文c)
{
MyUtility::模板wraplop(迭代,c);
}
//用法:
结构MyLoop
{
模板
无效运行(int迭代,上下文c)
{
调度器(这个,迭代,c);
}
};

循环
将从调用中推导出来。

您希望在宏中包装什么?整个类,还是运行模板?只有Run()模板。对。这是相当简单的解决方法。我今天可能喝不下咖啡了。谢谢!如果没有人提供直接的解决方案,我会认为这是正确的。