C++;定义可变宏 < C++ >是否可以创建变量,每次使用不同的值时,都会被扩展?

C++;定义可变宏 < C++ >是否可以创建变量,每次使用不同的值时,都会被扩展?,c++,macros,c-preprocessor,C++,Macros,C Preprocessor,例如,我想要以下内容 #define mytype [smth here] void foo(mytype a,mytype b,mytype c) 将扩展到 void foo(mytype1 a,mytype2 b,mytype3 c) 或 您不能让宏更改其扩展的内容,但可以使其扩展的内容具有不同的含义: std::string foo() { static int x; return std::string("myvar") + std::to_string(x++) +

例如,我想要以下内容

#define mytype [smth here]
void foo(mytype a,mytype b,mytype c)
将扩展到

void foo(mytype1 a,mytype2 b,mytype3 c)


您不能让宏更改其扩展的内容,但可以使其扩展的内容具有不同的含义:

std::string foo()
{
    static int x;
    return std::string("myvar") + std::to_string(x++) + "\n";
}

#define myvar foo()


如果它只在输出时增加,您可以定义一个覆盖
操作符的结构。下面是一个使用来实现函数参数的示例:

#include <boost/preprocessor/repetition/enum_binary_params.hpp>

void foo(BOOST_PP_ENUM_BINARY_PARAMS(3, mytype, p));

简短回答否;详细回答:在预处理过程中,noooomacro被扩展。你不能。你为什么需要它呢?它不像使用宏那么简单,但你可以用它来实现。也许在你的宏扩展中使用<代码>“第12行”/<代码> @ USER 992539:作为一个在过去的这一年中一直在为其他人C++工作的人,你可以说:不要这样做。它简化了什么,没有经验丰富的C++程序员会欢迎这种宏魔术。请发布另一个问题,描述您的模板应该做什么,让我们了解如何高效、优雅地完成这项工作,而不必使用花哨的宏。你可能会感到惊讶,你可能会学到一些东西,我们将解决原因,而不是症状foo()将在运行时展开,但我需要在编译时展开(@user2992539为什么?@LuchianGrigore我想在函数声明中使用如下宏types@user2992539你和我对simplify这个词有不同的定义。当然,你总共节省了大约1秒的打字时间,但可读性的损失要严重得多。@user2992539如果它真的起作用,将不会简化任何事情。这对用户和开发人员都不好。我需要在预处理/编译期间增加它,而不是在运行时。
cout<<myvar;
cout<<myvar;
myvar1
myvar2
struct myvarstruct {
  int i;
  myvarstruct() : i(1){}
} myvar;

ostream &operator << (ostream &o, myvarstruct &s) {
  return o << "myvar" << s.i++;
}
#include <boost/preprocessor/repetition/enum_binary_params.hpp>

void foo(BOOST_PP_ENUM_BINARY_PARAMS(3, mytype, p));
void foo(mytype0 p0, mytype1 p1, mytype2 p2);
#define mytype [smth here]
#define TYPE(a, b) _TYPE(a, b)
#define _TYPE(a, b) a##b
void foo(TYPE(mytype, 1) a, TYPE(mytype, 2) b, TYPE(mytype, 3) c)