テンプレートプログラミング入門:関数テンプレートとクラステンプレート
関数テンプレート
関数テンプレートは、データ型に依存しない汎用的な関数を定義するための仕組みです。コンパイル時にテンプレートから特定の型に応じた関数が生成され、コードの再利用性と柔軟性を高めます。
基本構文
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 投稿