0

パラメータクラスを取る特定のテンプレートがあるとします

template <typename ConnectorClass>
struct myClass {

}

特定の署名方法を実装するBOOST_ASSERT_MSGバリデーションを追加したいConnectorClass

returnType MethodName(param1, param2)

この場合、アサート条件はどのように書けばよいでしょうか。

編集:質問には明確な解決策がないように思われるため、回答に関するいくつかの参照に基づいて中間結果を含むサブ質問を投稿していますここに従ってください

4

3 に答える 3

2

できません。BOOST_ASSERT_MSGは、実行時に評価されます。クラスにそのメンバーがない場合は、テンプレートで予期されている場所でコンパイルエラーが発生します。

より良いエラーメッセージが目標の場合は、Boostのコンセプトチェックライブラリを調べてください。利用可能なメンバーに応じてテンプレートに異なることをさせることが目標である場合は、Boostを調べてくださいenable_if

これが同様の質問に対する答えです。

于 2010-10-25T15:17:42.857 に答える
0

Windows を使用していて、あまりうるさくない場合は、Visual C++ のハック拡張である __if_existsを使用してこれを行うことができます。

于 2010-10-25T15:08:35.123 に答える
0

Boost のさまざまな静的アサーション ユーティリティを調べてください。特に:

  • BOOST_STATIC_ASSERT (こちらのドキュメントを参照)
  • BOOST_MPL_ASSERT (こちらのドキュメントを参照)
于 2010-10-25T15:37:38.570 に答える