3

これは、標準 C++ で変数の型を出力することは可能ですか?と同じ質問です。しかし、私は RTTI を望んでいません。式テンプレート (Eigen など) を使用してコードを書いています。これは、変数の型が実際に関与している可能性があり、実際の型がわからないことを意味します。ただし、コンパイラは型を認識しており、何か問題が発生した場合に教えてくれます。

error: ‘const struct Eigen::EigenBase<Eigen::Matrix<double, 1, 1, 0, 1, 1> >’ ...

プログラムを壊さずにデバッグできるように、変数名を (静的) 型名の文字列に変換する方法はありますか? 例えば

int a;
M b;
cout << TYPEOF(a) << endl << TYPEOF(b) << endl;

印刷します

int
const struct Eigen::EigenBase<Eigen::Matrix<double, 1, 1, 0, 1, 1> >’
4

3 に答える 3

3

typeidタイプに適用できます (5.2.8p4):

std::cout << typeid(int).name() << '\n'
  << typeid(M).name() << '\n';

これには、実行時のオーバーヘッドは含まれません。

于 2012-12-04T12:43:07.720 に答える
3

std::cout << typeid(int).name() << '\n' << typeid(M).name() << '\n';

于 2012-12-06T18:06:19.023 に答える
1

https://stackoverflow.com/a/13703184/1693829を回答としてマークしました、ありがとう! これは私が書いたラッパーです:

#include <cxxabi.h>
#include <string>

template <typename T>
std::string t2s(T tt) {
  char *name;
  int status;
  name = abi::__cxa_demangle(typeid(tt).name(), 0, 0, &status);
  std::string namestring(name);
  free(name);
  return namestring;
}
于 2012-12-04T13:30:59.837 に答える