下面的代碼打印:混合模板函數重載和繼承
generic
overload
但我想的是,過載或專業化被稱爲在這兩種情況下,而不是通用的一個。我沒有試圖將重載與模板專門化混合在一起,他們在一起,因爲沒有按照我的預期工作。是否有任何模板魔法來實現這一點?
#include <iostream>
class Interface {};
class Impl: public Interface {};
class Bar
{
public:
template<typename T> void foo(T& t) {
std::cout << "generic\n";
}
void foo(Interface& t) {
std::cout << "overload\n";
}
};
template<> void Bar::foo<Interface>(Interface& t) {
std::cout << "specialization\n";
}
int main() {
Bar bar;
Impl impl;
Interface& interface = impl;
bar.foo(impl);
bar.foo(interface);
return 0;
}
當我第一次看到那個代碼時,我認爲它是不合格的,因爲GCC認爲它是不合格的。但第二個想法,我認爲這應該解決非模板,因爲非模板函數是比功能模板專業化更好的匹配,如果一切都相等 – 2010-12-06 23:11:21