C++ 方法 : Non-template class inheriting from an abstract specialized template

标签 c++ templates inheritance abstract-class

我有一个非模板抽象基类,用于能够引用基类型,因为非专用模板类型不能用作方法参数。

#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_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

最后,可以通过继承 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&.

它会产生以下两个错误:

第 1 行中的“无法实例化抽象类”。 第 2 行中的“无法将参数 3 从 SampleCallback& 转换为 ICallbackBase&”

我做错了什么?

最佳答案

virtual void OnSuccess(void result) = 0;

从未定义。

关于C++ 方法 : Non-template class inheriting from an abstract specialized template,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9657056/

相关文章:

c++ - 如何在 C++ 中声明/定义相互依赖的模板?

Java从对象到子类的转换

c# - 派生类中方法的选择性可访问性

java - 安卓 OpenCV : Edit ImageView Mat without Reassigning

c++ - 如何在 Windows 应用程序中截取屏幕截图?

c++ - 在编译时将不以 '\0' 结尾的 const char 数组与 C 风格字符串分开

java - 为什么不应该扩展 JFrame 和其他组件?

c++ - C++ 中的内联函数

javascript - 比较两个 URL 模板的优化算法

c++ - 在模板类定义下定义内联函数