gpt4 book ai didi

c++ - 在构建(编译)时生成代码

转载 作者:太空狗 更新时间:2023-10-29 21:44:59 24 4
gpt4 key购买 nike

这可能是个愚蠢的问题,但出于好奇,我想知道类似的事情是否可能。

假设我有功能

void Foo(int a)
{
...
}

我想做这样的事情

@pragma mypragma
void Foo(int a)
{
...
}

并且在编译时我想生成这个(如果 pragma mypragma 在函数之前定义)

void Foo(void * ptr, int a)
{
Foo(a);
}

void Foo(int a)
{
...
}

或带返回值

int Foo(void * ptr, int a)
{
return Foo(a);
}

int Foo(int a)
{
...
}

编辑一些例子。我想要的类似于 OpenMP

最佳答案

我认为这样的事情对你有用。您将需要单独的宏来返回值与不返回值,以及每个可能的参数数量。

// pt<x>: Parameter type <x>
// pn<x>: Parameter name <x>

#define METHOD_PAIR1(name, pt1, pn1) \
void name(pt1 pn1); \
void name(void* ptr, pt1 pn1) { name(pn1); } \
void name(pt1 pn1)

#define METHOD_PAIR2(name, pt1, pn1, pt2, pn2) \
void name(pt1 pn1, pt2 pn2); \
void name(void* ptr, pt1 pn1, pt2 pn2) { name(pn1, pn2); } \
void name(pt1 pn1, pt2 pn2)

#define FUNCTION_PAIR1(ret, name, pt1, pn1) \
ret name(pt1 pn1); \
ret name(void* ptr, pt1 pn1) { return name(pn1); } \
ret name(pt1 pn1)

#define FUNCTION_PAIR2(ret, name, pt1, pn1, pt2, pn2) \
ret name(pt1 pn1, pt2 pn2); \
ret name(void* ptr, pt1 pn1, pt2 pn2) { return name(pn1, pn2); } \
ret name(pt1 pn1, pt2 pn2)

METHOD_PAIR1(Foo, int, a)
{
// Insert body of void Foo(int a) here.
}

FUNCTION_PAIR1(int, Foo2, int, a)
{
// Insert body of int Foo2(int a) here.
}

关于c++ - 在构建(编译)时生成代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18701504/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com