C++ 自动预处理器代码生成

标签 c++ gcc g++ c-preprocessor preprocessor-directive

我有一个片段看起来像

std::string z_A_file("z_A.txt");
z_A_file = inputs_folder + z_A_file.c_str();
Eigen::Matrix<PRECISION, Eigen::Dynamic, Eigen::Dynamic> z_A_ = readArbitraryMatrix<PRECISION>(z_A_file.c_str());
Eigen::VectorXf z_A = z_A_;
//
std::string z_B_file("z_B.txt");
z_B_file = inputs_folder + z_B_file.c_str();
Eigen::Matrix<PRECISION, Eigen::Dynamic, Eigen::Dynamic> z_B_ = readArbitraryMatrix<PRECISION>(z_B_file.c_str());
Eigen::VectorXf z_B = z_B_;

我可以有一个预处理器函数,这样我就可以写

read_vector(A);
read_vector(B);

而不是重复相同的代码?

最佳答案

Could I have a PRE-PROCESSOR function such that I just write

这个文件:

#define read_vector(x) \
std::string z_##x##_file("z_"#x".txt");\
z_##x##_file = input_folder + z_##x##_file.cstr();\
Eigen::Matrix<PRECISION, Eigen::Dynamic, Eigen::Dynamic> z_##x##_ = readArbitraryMatrix<PRECISION>(z_##x##_file.cstr());\
Eigen::VectorXf z_##x = z_##x##_;

read_vector(A);
read_vector(B);

预处理后: g++ -E main.cpp -o main.pp

成为:

# 1 "main.cpp"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "<command-line>" 2
# 1 "main.cpp"

std::string z_A_file("z_""A"".txt");z_A_file = input_folder + z_A_file.cstr();Eigen::Matrix<PRECISION, Eigen::Dynamic, Eigen::Dynamic> z_A_ = readArbitraryMatrix<PRECISION>(z_A_file.cstr());Eigen::VectorXf z_A = z_A_;;
std::string z_B_file("z_""B"".txt");z_B_file = input_folder + z_B_file.cstr();Eigen::Matrix<PRECISION, Eigen::Dynamic, Eigen::Dynamic> z_B_ = readArbitraryMatrix<PRECISION>(z_B_file.cstr());Eigen::VectorXf z_B = z_B_;;

这是您期望的吗?

关于C++ 自动预处理器代码生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26988780/

相关文章:

c++ - 错误: stray ‘\342’ in my program,,但我找不到坏字符

c++ - 为什么library API + compiler ABI就足以保证不同版本gcc对象之间的兼容性?

c++ - 可以将名称作为参数传递给 C++ 模板吗?

c++ - 从多个临时文件中创建引用

c++ - SDL:体系结构 x86_64 的 undefined symbol

c++ - 模板类特化的模板方法

C++ 错误 "not all control paths return a value"

c++ - 将 bitset 转换为 unsigned char,反之亦然

python - 在 Cygwin 上安装 PIL

c - 默认情况下,gcc 链接到静态或动态标准库吗?