C ++ автоматическая генерация кода препроцессора

0

У меня есть фрагмент, который выглядит как

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);

вместо повторения одного и того же кода?

  • 1
    Как - то Inception приходит на ум. И вы могли бы, но какая польза от этого? Создайте коллекцию векторов, создайте схему именования, соответствующую файлам, сопоставьте ее. Бонусные баллы за лямбду.
  • 0
    Если у вас есть пять или более таких фрагментов, это может стоить проблем. Только для двух, использование препроцессора не стоит терять видимость кода.
Показать ещё 2 комментария
Теги:
gcc
g++
c-preprocessor
preprocessor-directive

1 ответ

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_;;

Это то, чего вы ожидаете?

  • 0
    Да, но это ужасный код. «Дайте человеку рыбу ...»
  • 0
    but that's terrible code ты совершенно прав!
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню