是否有一种简洁的方法可以在不使用宏的情况下指向模板化函数的所有实例?
我有几个模板化函数,我想在各种类型上测试它们:
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
,在使用宏设置测试用例时效果不佳。
有没有办法做这样的事情:
void testAcrossTypes(SomeType f) {
f<int> ();
f<bool> ();
f<char> ();
f<double> ();
}
除了定义问题之外,这看起来更干净SomeType
。这个问题 (如何定义具有模板参数的函数指针的 typedef https://stackoverflow.com/questions/14848924/how-to-define-typedef-of-function-pointer-which-has-template-arguments) 解释如何定义指向模板函数的指针;但是,要求指定模板参数。
澄清一下:想象一下function1
, function2
, and 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);