如何根据接口类型运行

How to run according to interface type

本文关键字:运行 接口类型 何根      更新时间:2023-10-16

我需要根据调用的接口运行的代码,例如在以下代码中:

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>();
}