我有一个看起来像
的代码段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_;
我可以使用PRE-PROCESSOR功能,只需编写
即可read_vector(A);
read_vector(B);
而不是重复相同的代码?
答案 0 :(得分:2)
我可以使用PRE-PROCESSOR功能,只需编写
即可
此档案:
#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_;;
这是你期望的吗?