テンプレートプログラミング入門:関数テンプレートとクラステンプレート

関数テンプレート 関数テンプレートは、データ型に依存しない汎用的な関数を定義するための仕組みです。コンパイル時にテンプレートから特定の型に応じた関数が生成され、コードの再利用性と柔軟性を高めます。 基本構文 template <typename T> T max_value(T a, T b) { return (a > b) ? a : b; } インスタンス化の方法 暗黙的インスタンス化:引数の ...

8月1日 03:18 投稿

C++17新機能:クラステンプレートの引数自動推論

テンプレート引数の自動推論 C++17以前、クラステンプレートのコンストラクタは関数テンプレートのようにテンプレート引数を自動で推論できませんでした。例えば、以下のようなコードは書けませんでした。 std::pair a{1, "a"s}; // C++17以降 代わりに、以下のように明示的に型を指定する必要がありました。 std::pair<int, string> a{1, "a"s ...

7月25日 23:04 投稿

C++における継承と多態性の実装例

ロボットペットの多態性デモ pets.hpp #pragma once #include <string> #include <iostream> class RoboPet { public: RoboPet(const std::string& name); virtual std::string vocalize() = 0; std::string get_name() const; private: std::string pet_name; }; RoboPet::RoboPet(const std::string& name) : pet_name{name} {} ...

6月25日 18:05 投稿

テンプレートプログラミングの基礎

1. ジェネリックプログラミングとは 異なる型の変数を交換する関数を実装する際、通常は次のように型ごとに関数を用意します: void swap(int& a, int& b) { int tmp = a; a = b; b = tmp; } void swap(double& a, double& b) { double tmp = a; a = b; b = tmp; } しかし、このような関数オーバーロードには以下のような問題 ...

6月23日 21:09 投稿

C++テンプレート入門

ジェネリックプログラミング これまでの学習を通じて、異なる型の二つの数値の加法を実装するには必然的に関数のオーバーロードを使用しなければならないことを理解しました。 int add_numbers(int x, int y) { return x + y; } double add_numbers(double x, double y) { return x + y; } char add_characters(char x, char y) { return x + y; } しかし、この方法 ...

6月18日 20:18 投稿