ビット単位の操作を行うメソッドでテンプレートクラスを作成していますので、このメソッドが使用されるケースではis_integral
の型を制限します。私は簡単な例hereを取り、次のようにビットを変更:テンプレートメンバー関数のタイプを制限するためにtype_traitsを使用する
#include <iostream>
#include <type_traits>
template <typename T>
class A
{
public:
A();
T foo(T i) {
static_assert(std::is_integral<T>::value, "Integer required.");
return (i & 2);
}
private:
T x;
};
int main() {
A<double> a;
std::cout << a.foo(3) << std::endl;
return 0;
}
しかし、コンパイラはstatic_assert()
でコンパイルエラーを2私を与える:
static_assert failed "Integer required."
とreturn (i & 2);
時:
invalid operands to binary expression ('double' and 'double')
マイ質問には、とにかくreturn (i & 2);
のエラーが表示される場合は、type_traits
を使用してここでタイプを確認してくださいもっと少なく?そして、コンパイルできないようにする代わりに、実行時にコンソール出力にエラーをスローする方法はありますか?
QtはC++コンパイラではありませんが、あなたはあなたのコンパイラに名前を付ける必要がありますので。 – AnatolyS
'とにかくコンソール出力にエラーがスローされて' static_assert –
@AnatolySの目的を破りますが、Qtは実際にはコンパイラではありません。実際のコンパイラは質問には関係ありません。私はそれを編集し、Qtを削除します。 – SergeyA