Foo
私はクラスを持っています。いくつかのメソッドでそれを呼び出しましょう:
template<typename T>
class Foo {
public:
Foo() { /* ... */ }
bool do_something() { /* ... */ }
// This method should be callable only if:
// std::is_floating_point<T>::value == true
void bar() {
// Do stuff that is impossible with integer
}
};
と の両方を構築できるようにしたいのですが、型 T が浮動小数点型でない場合の呼び出しを許可したくありませんFoo<double>
。また、実行時ではなくコンパイル時にエラーが生成されるようにします。だから、私が欲しいのは:Foo<int>
bar()
Foo<double> a;
a.bar(); // OK
Foo<int> b;
bool res = b.do_something(); // OK
b.bar(); // WRONG: compile error
( thisまたはthis oneenable_if
のような投稿で)で多くのことを試しましたが、 でタイプを使用できなくなりました。例えば:int
Foo
typename std::enable_if<std::is_floating_point<T>::value>::type
bar() { /* ... */ }
main.cpp:112:28: required from here
foo.h:336:5: error: no type named ‘type’ in ‘struct std::enable_if<false, void>’
bar() {
bar()
浮動小数点型の使用を制限し、整数型を他の場所で使用できるようにするにはどうすればよいですか?