の有用性を理解しようとしてstatic_assert
います。設計を実施するのに役立つかどうか、もしそうならその方法を知りたいです。
テンプレート型のサイズに基づいて部分的に特殊化された別のテンプレート クラス内に独自の実装を隠す一般的なテンプレート クラスがあります。このデザインの概要は次のとおりです。
template <class T, size_t S = sizeof(T)>
struct Helper;
template <class T>
struct Helper<T, sizeof(long)>
{
static T bar();
};
// ... other specializations ...
template <class T>
class Foo
{
public:
T bar()
{
return Helper<T>::bar();
}
};
Fooは、サイズがHelperT
の特殊化によってサポートされている場合にのみサポートされます。たとえば、との両方がサポートされています。ただし、ユーザーが. 通常、Helperの特殊化が定義されていないため、エラーが発生しますが、これは意図された動作です。Foo<long>
Foo<unsigned long>
Foo<bool>
bool
static_assert
このインターフェースのユーザーにより役立つエラーを提供するために、この設計で使用する方法はありますか?
さらに、サイズが正しい場合でも、ユーザーが特定のタイプを使用することを制限したいと考えています。たとえば、Foo<float>
許可されるべきではありません。現在、これを強制する唯一の方法は、ドキュメントに太字のコメントを記載することです。:)