c++でtypename Tをstringに変換する方法 [重複]。
2023-10-28 16:59:29
質問
c++のテンプレートで遊んでいるとき、typename Tを文字列に変換する問題に遭遇しました。例えば
template <typename T>
class Matrix {
public:
Matrix() {
//my_type = string type of T. i.e. if T is char. I want my_type to be "char".
}
string my_type;
}
Tが何であるかを示す文字列に変換するにはどうすればよいのでしょうか。
注:あくまでお遊びなので、いつそのようなものが必要になるかについてはご心配なく。
どのように解決するのですか?
このための組み込みのメカニズムはありません。
typeid(T)::name()
はいくつかの情報を与えることができますが、標準はこの文字列を人間が読めるようにすることを義務づけていません; ただ、それはそれぞれのタイプについて明確でなければなりません。(例: Microsoft Visual C++ は人間が読める文字列を使用しますが、GCC は使用しません)。
しかし、あなた自身のシステムを構築することができます。たとえば、特質ベースです。このようなものです。
// default implementation
template <typename T>
struct TypeName
{
static const char* Get()
{
return typeid(T).name();
}
};
// a specialization for each type of those you want to support
// and don't like the string returned by typeid
template <>
struct TypeName<int>
{
static const char* Get()
{
return "int";
}
};
// usage:
const char* name = TypeName<MyType>::Get();
関連
-
[解決済み】C++でユーザー入力を待つ【重複あり
-
[解決済み] std::string を const char* または char* に変換する方法
-
[解決済み] テンプレートにおける'typename'と'class'の違い?
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] C++でintをstringに変換する最も簡単な方法
-
[解決済み] template "と "typename "キーワードはどこに、なぜ入れなければならないのですか?
-
[解決済み] std::stringのインスタンスを小文字に変換する方法
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】識別子 "string "は未定義?
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み】Visual C++で "Debug Assertion failed "の原因となる行を見つける。
-
[解決済み】CMakeエラー at CMakeLists.txt:30 (project)。CMAKE_C_COMPILER が見つかりませんでした。
-
[解決済み】浮動小数点数の乱数生成
-
[解決済み] gdbを使用してもデバッグシンボルが見つからない
-
[解決済み】C++ - ステートメントがオーバーロードされた関数のアドレスを解決できない。
-
[解決済み】std::cin.getline( ) vs. std::cin
-
[解決済み】VC++の致命的なエラーLNK1168:書き込みのためにfilename.exeを開くことができません。
-
[解決済み】標準C++で変数の型を表示することは可能ですか?