- 1 名前:デフォルトの名無しさん [2009/07/18(土) 02:54:58 ]
- C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレに お願いします。 前スレ C++相談室 part70 pc12.2ch.net/test/read.cgi/tech/1244942050/l50
- 74 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 14:56:28 ]
- Boost.ConceptCheckのConceptAssertとTypeTraitsのisBaseOfでできるな
- 75 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 14:56:40 ]
- // boostだとこうなる。参考書丸パクリだが
#include <iostream> #include <typeinfo> #include <boost/type_traits.hpp> #include <boost/utility/enable_if.hpp> template< typename sub_class, typename super_class, class = void > class X{ public: X() { std::cout << typeid(sub_class).name() << _T("は、") << typeid(super_class).name() << _T("の派生型ではありません。") << std::endl;} }; template< typename sub_class, typename super_class > class X< sub_class, super_class, typename boost::enable_if< boost::is_base_of< super_class, sub_class > >::type >{ public: X() { std::cout << typeid(sub_class).name() << _T("は、") << typeid(super_class).name() << _T("の派生型です。") << std::endl;} }; struct A{}; struct B : A{}; struct C{}; int _tmain(int argc, _TCHAR* argv[]) { X< B, A > x0; // strect Bは、strect Aの派生型です。 X< C, A > x1; // strect Cは、strect Aの派生型ではありません。 return 0; }
- 76 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 15:17:15 ]
- >>71
C++のtemplateは黒魔術だから、大抵何でもできる。 というか、お前釣りだろ?w alfalfa.livedoor.biz/archives/51489493.html 最近、知ったか房みてるとどうしても↑に思える
|

|