Boost ライブラリのenable_if は、C++ テンプレートのメタプログラミングでも重要な役割を果たす非常に強力で実用的なツールです。このライブラリをよりよく理解して使用するには、いくつかのテスト プログラムを作成して、その機能とパフォーマンスを検証する必要があります。
簡単な例を次に示します。
#include <iostream>
#include <type_traits>
#include <boost/utility/enable_if.hpp>
template<class T>
typename boost::enable_if<std::is_integral<T>, T>::type
add(T x, T y)
{
std::cout << "Adding two integers: ";
return x + y;
}
template<class T>
typename boost::disable_if<std::is_integral<T>, T>::type
add(T x, T y)
{
std::cout << "Adding two non-integers: ";
return x + y;
}
int main()
{
int a = 1, b = 2;
float c = 1.2, d = 3.4;
std::cout << add(a, b) << std::endl;
std::cout << add(c, d) << std::endl;
return 0;
}
この例では、2 つの関数テンプレート add を定義します。これらは、それぞれ 2 つの整数または 2 つの非整数の加算演算を処理するために使用されます。Enable_if を使用すると、型チェックをより厳密にすることができ、入力パラメータの型が要件を満たしている場合にのみ、特定の関数が有効になります。