【发布时间】:2016-07-21 03:13:30
【问题描述】:
有没有一种简洁的方法来指向模板化函数的所有实例而不使用宏?
我有几个模板化的函数,我想在各种类型中进行测试:
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 的问题。这个问题 (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 问题?我不明白你在追求什么。
-
我正在尝试解决这个问题:stackoverflow.com/questions/38491608/…。具体来说,我正在尝试用纯代码替换宏。该示例剥离了测试细节。想象一下
function1测试一个模板函数。 -
实际运行什么?
标签: c++ templates macros function-pointers