我有两个模板类,通常我更喜欢foo
类的Search
版本。但遗憾的是,由于缺少c ++ 11支持,我的编译器无法理解foo
版本。 (他不会理解这一行:template <typename U = _Format>
)
bar
版本将创建_Format
类型的实例以调用正确的委托。所以也调用了一个构造函数!与Foo
版本相比,这会是性能问题吗? (我知道这就像过早的优化,但我感兴趣)
#include <iostream>
struct format1 {
format1(void) { }
};
struct format2 {
format2(void) { }
};
namespace foo
{
template <typename _Format>
class Search
{
public:
void createData()
{
doCreateData();
}
private:
template <typename U = _Format>
void doCreateData();
template <>
void doCreateData<format1>()
{
using namespace std;
cout << "Format1" << endl;
}
template <>
void doCreateData<format2>()
{
using namespace std;
cout << "Format2" << endl;
}
};
}
namespace bar
{
template <typename _Format>
class Search
{
public:
void createData(void)
{
doCreateData(_Format());
}
private:
void doCreateData(format1)
{
using namespace std;
cout << "Format1" << endl;
}
void doCreateData(format2)
{
using namespace std;
cout << "Format2" << endl;
}
};
}
int main(int argc, char *argv[])
{
(void)argc; (void)argv;
bar::Search<format2> search;
search.createData();
}