我在哪里有这样的问题:
#define A_BODY printf("b is %s and c is %d, typeless! :3\n", b, c);
#define B_BODY return "test";
#define C_BODY return 42;
我需要编写一个代码,例如,调用 a(b(), c()) 及其各自的类型。
在 C++14 上,我可以轻松做到这一点:
template<typename B, typename C> auto a(B &&b, C &&c) {
A_BODY
};
auto b() {
B_BODY
};
auto c() {
C_BODY
};
int main() {
auto _b = b();
auto _c = c();
auto _a = a(_b, _c);
return 0;
};
达到预期的结果......有没有办法在 C++11 上获得相同的结果?:'(
此外,它们可以递归地相互调用,因此这里的简单排序也无济于事。
编辑
我将尝试更好地解释我的情况。
我有一个这样的输入文件,例如:
a is b c {
printf("b is %s and c is %d\n", b, c);
if(c > 42)
printf("c is bigger than the truth!\n");
return strlen(b) + c;
};
b is {
return "test";
};
c is {
return 42;
};
我需要生成一个可以正确调用它们的 C++ 代码。我试图推断返回类型而不需要在输入文件上定义它们。
从中可以得到*_BODY
规格、参数个数、调用顺序,但不知道参数是什么类型。所以我需要一个模板化的 lambda,例如,对函数体进行惰性求值。
我可以在 GCC 和 CLang 上使用 C++14 来做到这一点,但这是一个商业项目,我还需要支持 Visual Studio 2012。我正在尝试找到一种解决方法,如果有的话。:(