Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ 部分テンプレート特殊化 | イントロダクション
C++テンプレート

book部分テンプレート特殊化

メニューを表示するにはスワイプしてください

単一パラメータのテンプレートに対するテンプレート特殊化は簡単ですが、複数のパラメータがある場合はより複雑になります。ここで部分テンプレート特殊化が役立ちます。これは、特定の型や値のサブセットに対してテンプレートの特殊なバージョンを作成することを可能にします。

main.cpp

main.cpp

copy
12345678
// What if `T1` and `T2` are the same type? // Or what if you want to define special behavior when `T1` is a `std::string`? template<typename T1, typename T2> void TemplateExample(T1 first, T2 second) { std::cout << "Generic template!" << std::endl; }

部分テンプレート特殊化の構文

部分テンプレート特殊化はテンプレートのオーバーロードの一種と考えることができます。以下は守るべきルールです。

部分特殊化では、テンプレート関数の一部のパラメータを特定の型に固定し、他のパラメータを汎用のままにした新しいバージョンを定義します。コンパイラは、テンプレートのインスタンス化時に型が一致すると、この特殊化されたバージョンを使用します。

main.cpp

main.cpp

copy
123456789101112131415
#include <iostream> // Primary template template<typename T1, typename T2> bool IsSameType(T1 first, T2 second) { return false; } // Partial specialization for when both types are the same template<typename T> bool IsSameType(T first, T second) { return true; } int main() { std::cout << IsSameType(10, 'a') << std::endl; std::cout << IsSameType("Hello", "World") << std::endl; }

これはテンプレート特殊化の一つの使い方ですが、他にもより一般的なシナリオがあります。

main.cpp

main.cpp

copy
123456789101112131415
#include <iostream> // Primary template template <typename T1, typename T2> // General case void Template(T1 a, T2 b) { std::cout << "General" << std::endl; } // Partial specialization for when `T1` is `bool` template <typename T2> // Special case when the first type is `bool` void Template(bool a, T2 b) { std::cout << "Special" << std::endl; } int main() { Template(false, 25); Template(100, 300); }
question mark

部分テンプレート特殊化とは何ですか?

正しい答えを選んでください

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 1.  15

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 1.  15
some-alt