1

このコードが失敗する理由

エラー C2893: 関数テンプレート ''unknown-type' makeAndProcessObject(const Builder &)' の特殊化に失敗しました

私はMSVC2012を使用しています

class BBuilder
{
public:
    int makeObject()
    {
        return 22;
    }
};

template <typename Builder>
auto
makeAndProcessObject (const Builder& builder) -> decltype( builder.makeObject() )
{
    auto val = builder.makeObject();
    // do stuff with val
    return val;
}

int main()
{
    BBuilder myobj;
    auto retval = makeAndProcessObject(myobj);

    return 0;
}

(実例)

4

3 に答える 3

8

makeObjectでこの関数を呼び出そうとしているので、関数は const である必要がありconstant object、すべてが機能します。

于 2013-04-05T10:24:23.577 に答える
2

makeAndProcessObject 関数は定数参照オブジェクトを取得するため、非定数メンバー関数 (builder.makeObject()) にアクセスできません。makeObject() を定数メンバー関数 [Ex :int makeObject() const] に変換するか、builder.makeObject() テンプレート関数で非定数オブジェクトを使用する [例: makeAndProcessObject (Builder& builder)]

よろしく、 シヴァクマール

于 2013-04-05T11:42:38.317 に答える
2

問題はそれです

makeAndProcessObject (const Builder& builder) receives a const builder

しかし makeObject() 関数は const ではありません!! そのため、戻り値を推測できません... const 修飾子を削除するか、makeObject const を作成して、関数を見つけることができます。

int makeObject() const
{
    return 22;
}
于 2013-04-05T10:26:57.663 に答える