是否有简明的方式指向模板函数的所有实例而不使用宏?所有模板实例的C++单一函数指针
我有我想要跨多种类型的测试几个模板功能:
template<typename T>
void function1() {
return;
}
template<typename T>
void function2() {
return;
}
template<typename T>
void function3() {
return;
}
我可以用宏做:
#define TEST_ACROSS_TYPES(fn) \
fn<int>(); \
fn<bool>(); \
fn<char>(); \
fn<double>(); \
TEST_ACROSS_TYPES(function1);
TEST_ACROSS_TYPES(function2);
但是,(1)宏是丑(2)我使用的是CATCH
,使用宏设置测试用例时效果不佳。
有没有办法做这样的事情:这似乎更清洁,除了定义SomeType
的问题
void testAcrossTypes(SomeType f) {
f<int>();
f<bool>();
f<char>();
f<double>();
}
。此问题(How to define typedef of function pointer which has template arguments)解释了如何定义指向模板化函数的指针;但是,要求指定模板参数。
对于澄清:设想function1
,function2
,和function3
每个测试一个不同的模板函数。每个函数都需要测试int
,byte
,char
,double
等。我想避免为每个函数明确地设置很多(即num_functions * num_types)测试。相反,我希望有一个指向测试功能(function1
,function2
等),并运行它为每个模板类型单一的方法,从而巩固
function1<int>();
function1<byte>();
function1<char>();
function1<double();
...
function2<int>();
function2<byte>();
function2<char>();
function2<double();
...
function3<int>();
function3<byte>();
function3<char>();
function3<double();
...
到每个测试功能只需一个电话
testAcrossTypes(function1);
testAcrossTypes(function2);
testAcrossTypes(function3);
XY-问题?我不明白你的意思。 –
我试图找到解决这个问题的方法:http://stackoverflow.com/questions/38491608/test-c-template-class-using-catch-framework。具体来说,我试图用纯代码替换宏。该示例剥离了测试细节。想象一下'function1'测试模板化函数。 – Zack
实际运行_what_? –