1

メンバーとして boost.bimap を使用してテンプレート クラスを作成しようとしています。ただし、通常の typedef プロトコルに従うと、コンパイラ (私は Visual Studio Express 2012 を使用しています) が大量の C4512 (代入演算子を生成できませんでした) 警告を生成します。奇妙なことに、コードはコンパイルされ、クラスを完全に実装すると、正しく動作します。ただし、警告の原因と、可能であればそれを回避する方法を知りたいです。誰かにアイデアがあれば、とても感謝しています!

#ifndef TESTCLASS_H
#define TESTCLASS_H

#include <map>
#include <boost/bimap.hpp>

template<typename T>
class TestClass
{
public:
    TestClass()
    {

    }
private:
    typedef boost::bimap<int,int> bimap_t;
    typedef bimap_t::value_type valuetype;
};

#endif // TESTCLASS_H

テンプレートの外側にある bimap コードでは、警告は表示されません。

4

1 に答える 1

0

MSDNのドキュメントから

コードの C4512 警告は、次の 3 つの方法のいずれかで解決できます。

  • クラスの代入演算子を明示的に定義します。
  • クラスのデータ項目から const または参照演算子を削除します。
  • #pragma警告ステートメントを使用して、警告を抑制します。

からの継承boost::noncopyable(最初のオプション) が機能せず、クラス ソースにアクセスできない場合 (2 番目のオプション)、#pragma警告が表示されます。

#pragma warning( disable : 4152 )
// your offending code
#pragma warning( pop ) 
于 2013-09-20T18:00:27.910 に答える