如何根据接口类型运行
How to run according to interface type
我需要根据调用的接口运行的代码,例如在以下代码中:
public class VirtualStreamingFiler : IBFiler, IAFiler
{
public VirtualStreamingFiler()
{
cout << "I like " << interface_func_type_return() << " too!n";
}
}
Interface_func_type_return()将根据所用的接口返回字符串,如果iafiler,则返回" a_string_request",如果ibfiler return return" general_purpose_b"
int main ()
{
IAFiler _vpnFiler = new VirtualStreamingFiler();
return 0;
}
因此,这里的输出将是:
A_string_request
我该怎么做?
谢谢
如果您需要一个函数来执行两件不同的操作,则需要两个不同的函数。班级中两个不同功能的唯一方法可以具有相同的名称,并且相同的签名是,如果其中至少一个不是虚拟的,并且它们来自不同的基类。
class A
{
public: void func () { funcA(); }
private: void funcA() = 0;
};
class B
{
public: void func () { funcB(); }
private: void funcB() = 0;
};
class AB : public A, public B
{
void funcA() { do something; }
void funcB() { do something else; }
};
但是,这是一个非常可疑的设计,我会三思而后行。
如果要运行一些代码,具体取决于创建后类的使用方式,最好将代码从创建代码(以及一般的类代码)中解除该代码,并委派运行此代码(并弄清楚它应该运行什么代码)在对象创建对象的某些实体时。示例:
#include <iostream>
#include <memory>
#include <string>
struct IAFiler
{ virtual ~IAFiler() = default; };
struct IBFiler
{ virtual ~IBFiler() = default; };
struct VirtualStreamingFiler : IAFiler, IBFiler
{};
class VirtualStreamingFilerFactory
{
template <typename T>
static std::string usage_type();
public:
template <typename T>
static std::unique_ptr<T> create()
{
std::cout << "I like " << usage_type<T>() << " too!n";
return std::make_unique<VirtualStreamingFiler>();
}
};
template <>
std::string VirtualStreamingFilerFactory::usage_type<IAFiler>() { return "A_string_request"; }
template <>
std::string VirtualStreamingFilerFactory::usage_type<IBFiler>() { return "general_purpose_B"; }
template <typename T>
std::string VirtualStreamingFilerFactory::usage_type() { return "no_data"; }
int main()
{
auto _vpnFiler = VirtualStreamingFilerFactory::create<IAFiler>();
}
相关文章:
- 通过switch和static_cast访问多态对象的运行时类型
- 无法使用接口类型对priority_queue中的对象进行排序<T>
- 如何正确存储/传递接口类型的变量(现代 c++)?
- 如何在void*指针下检查运行时类型(允许简单类型,没有基类)?
- 获取派生模板实例化的运行时类型
- 运行时类型推断和代码重复
- UWP,加载窗口运行时组件 == 请求的窗口运行时类型 "..." 未注册
- 为什么C++不按运行时类型销毁对象?
- 如何根据接口类型运行
- C 将功能实现对象作为接口类型
- 继承和 2 种接口类型
- 如何使用Qt在Windows上检查网络接口类型是以太网或无线
- 在 C# 中加载 COM 对象会引发异常"无法将类型'System.__ComObject'的 COM 对象强制转换为接口类型...",但C++或 VB 不会
- 运行时类型定义
- 在C++中如何将运行时类型鉴别器映射到模板实例(无需手动枚举所有实例)
- 编译器不可知的运行时类型信息
- C++中高效的运行时类型检查
- 运行时类型信息的奇怪行为
- 运行时类型信息(为什么此代码不起作用)
- 运行时类型检查