未分化テンプレートタイプができないので、私は、基本型への参照を有することができるようにするために使用される非テンプレート抽象基底クラスを有しますメソッドの引数として使用されます。 1はICallbackから継承したコンクリート型を作成することができ、最後にC++方法:抽象特殊テンプレートを継承非テンプレートクラス
#ifndef RPCPP_ICALLBACK_H
#define RPCPP_ICALLBACK_H
#include "ICallbackBase.h"
namespace rpcpp
{
template <class T>
class ICallback : public ICallbackBase
{
public:
virtual ~ICallback() {};
virtual void OnSuccess(T result) = 0;
virtual void OnError(std::string error) = 0;
};
}
#endif // RPCPP_ICALLBACK_H
:
#ifndef RPCPP_ICALLBACKBASE_H
#define RPCPP_ICALLBACKBASE_H
#include <string>
namespace rpcpp
{
class ICallbackBase
{
public:
virtual ~ICallbackBase() {};
virtual void OnSuccess(void result) = 0;
virtual void OnError(std::string error) = 0;
};
}
#endif // RPCPP_ICALLBACKBASE_H
抽象テンプレートクラスICallbackはICallbackベースから、そのように継承するすべての
#ifndef RPCPP_SAMPLE_CALLBACK_H
#define RPCPP_SAMPLE_CALLBACK_H
#include "ICallback.h"
#include <iostream>
namespace rpcpp
{
class SampleCallback : public ICallback<double>
{
public:
~SampleCallback() {};
virtual void OnSuccess(double result)
{
std::cout << "Successfully executed a remote procedure, A + B = " << result << "\r\n\r\n";
}
virtual void OnError(std::string error)
{
std::cout << "Error while executing a remote procedure: " << error << "\r\n\r\n";
}
};
}
#endif // RPCPP_SAMPLE_CALLBACK_H
をしかし、私はこれを使用しようとすると、いいので、コンパイル:
rpcpp::SampleCallback sc;
sic.CalculateMean(15, 28, &sc); // Third argument of this method is expected to be ICallbackBase&.
次の2つのエラーが生成されます。
"#1"行で "抽象クラスをインスタンス化できません"。 "2番線のSampleCallback &からICallbackBase &"にパラメータ3を変換できません
何が間違っていますか?
あなたはそれを参照がかかりますが、あなたはポインタを渡していると述べました。 –