プリプロセッサを使用して、変数の名前を印刷することが可能である:
#define STRINGIFY(a) #a
#define VAR_NAME(a) STRINGIFY(a)
int my_var = 42;
std::cout << "var name = " << VAR_NAME(my_var) << std::endl;
テンプレートクラスのオーバーロードを使用することができ、クラスの名前を取得し、名前を取得するタイプごとに、このクラスの部分的な特殊化を実装するだけで済みます。すべてのPODの種類とSTLコンテナ用
template< typename T> class type
{
public:
static constexpr const char* name() {
return "unknown";
} // end type< T>::name
}; // type< T>
template<> class type< int>
{
public:
static constexpr const char* name() {
return "int";
}
}
template<> class type< std::string>
{
public:
static constexpr const char* name() {
return "std::string";
}
}
std::cout << "type name = " << type< int>::name() << std::endl;
このようなクラスや専門分野、ここで提供されています: https://github.com/Gemini67/Celma
は、変数の型名を取得するためにも解決策が含まれています。
オブジェクト名またはオブジェクトタイプ名? –
C/C++で変数の名前を表示できないことは完全には正しくありません。実際には、プリプロセッサを使って行うことができます: '#define VAR_TO_STRING(VAR)#VAR' –
オブジェクト名をください。 – Dominique