1
1
只要您有三个不同命名的函数,并且需要根据类型选择一个函数,那么在某些情况下,您必须使用重载或某些traits类来选择正确的函数。我认为没有办法解决这个问题。但是,由于对其中一个函数的调用是唯一需要这样做的事情,因此如果这些函数有更多代码的话
下面是一个使用重载替代方法的示意图。首先,您需要三个相同函数的重载,每个重载调用三个不同函数中的一个。附加的
现在您可以开始编写通用函数了。你需要决定怎么做
然而,正如你所看到的,只有在这样的情况下,这才是真正值得麻烦的
|
2
1
为了变得“更聪明”,可以尝试创建一个由“getted”类型索引的getter的boost::fusion::map:
正如您所看到的,与直截了当的方法相比,收益并不明显。 |
3
1
我认为函数对象是最好的,因为您可以适应不同的签名。
然后,这些调用将类似于:
传入的结构将包含下载的对象。在C++0x中,您将能够定义一个概念,该概念将在模板参数T上提供更好的类型检查。 |
4
0
能够 使用宏将条件逻辑保持在一个中心位置,但这可能会使您的代码非常不可读,这是不值得的。 |
5
0
您可以使用指向成员函数的指针找到某个地方:
现在,getImage方法的例外使它变得更加困难。可以尝试使用类似boost::bind/std::tr1::bind实例的方法来实现这一点。
|
6
-1
这里有一个C-hacky的方法。
|
TCD · 标准库非类型模板类是否显式实例化? 2 年前 |
sovesti · 参数较少的模板函数中的演绎 2 年前 |
KiraHoneybee · 具有构造函数参数的模板化类 2 年前 |
Seymore Glass · 模板不工作的默认参数 2 年前 |
Alexander Daum · 模板参数中对模板类型的引用 6 年前 |
ledonter · 为什么注入的类名有时不被视为类模板中的模板名? 6 年前 |