テンプレート引数が参照型かどうかはC++ 03でチェックしたいと思います。 (すでにC++ 11とBoostにはis_reference
があります)。テンプレート引数が参照かどうかの確認[C++ 03]
私はSFINAEと、参照へのポインタを持つことができないという事実を利用しました。ここで
は、私の解決策
#include <iostream>
template<typename T>
class IsReference {
private:
typedef char One;
typedef struct { char a[2]; } Two;
template<typename C> static One test(C*);
template<typename C> static Two test(...);
public:
enum { val = sizeof(IsReference<T>::template test<T>(0)) == 1 };
enum { result = !val };
};
int main()
{
std::cout<< IsReference<int&>::result; // outputs 1
std::cout<< IsReference<int>::result; // outputs 0
}
はそれで任意の特定の問題でしょうか?誰かが私によりよい解決策を提供できますか?それはあなたのソリューションよりも単純なようだ私には
//! compile-time boolean type
template< bool b >
struct bool_ {
enum { result = b!=0 };
typedef bool_ result_t;
};
template< typename T >
struct is_reference : bool_<false> {};
template< typename T >
struct is_reference<T&> : bool_<true> {};
:
完全にするために、あなたはすなわち 'IsReference :: result'、参照ポインタのためのテストケースを追加することができます。 –
iammilind