标签: implementation

在对象工厂中注册对象创建者

我有方便的对象工厂模板,它按类型ID名称创建对象.实现非常明显:ObjectFactory包含从std::string对象创建者函数的映射.然后,所有要创建的对象都应在此工厂中注册.

我使用以下宏来做到这一点:

#define REGISTER_CLASS(className, interfaceName) \
   class className; \
   static RegisterClass<className, interfaceName> regInFactory##className; \
   class className : public interfaceName
Run Code Online (Sandbox Code Playgroud)

这里RegisterClass

   template<class T, class I>
   struct RegisterClass
   {
      RegisterClass()
      {
         ObjectFactory<I>::GetInstance().Register<T>();
      }
   };
Run Code Online (Sandbox Code Playgroud)

用法

class IFoo
{
public:
   virtual Do() = 0;
   virtual ~IFoo() {}
}

REGISTER_CLASS(Foo, IFoo)
{
   virtual Do() { /* do something */ }
}

REGISTER_CLASS(Bar, IFoo)
{
   virtual Do() { /* do something else */ }
}
Run Code Online (Sandbox Code Playgroud)

类在工厂中同时定义和注册.

问题是regInFactory...静态对象是在.h文件中定义的,因此它们将被添加到每个翻译单元中.同一个对象创建者将被多次注册,更重要的是,会有很多具有静态存储持续时间的冗余对象. …

c++ implementation design-patterns visual-c++

2
推荐指数
1
解决办法
8896
查看次数

C#:如何在字符串中的每一行前加上文本?

"MagicFunction"的实现会如何使以下(nunit)测试通过?

public MagicFunction_Should_Prepend_Given_String_To_Each_Line()
{
    var str = @"line1
line2
line3";

    var result = MagicFunction(str, "-- ");

    var expected = @"-- line1
-- line2
-- line3";

    Assert.AreEqual(expected, result);
}
Run Code Online (Sandbox Code Playgroud)

c# string implementation

2
推荐指数
1
解决办法
1万
查看次数

C++标准库是否必须用C或汇编语言编写?

是否可以仅使用C++编写完整的C++标准库(当然包括STL,但只包含内部依赖项)?我会想象容器和<cstdlib>功能将在以下方面可行charS,bitshifts,以及循环和其他字节花哨的东西,但这样的东西例外,或许std::coutstd::cin似乎很难给我一个不依赖开始.假设有一组可用的OS功能,它们完全在汇编中实现(以避免任何C污染).

我假设编译器理解从类和虚函数到模板和函数重载的所有内容,这些是语言级别的东西,并且在库IMHO中没有位置.

如果以前曾经问过这个问题或者是一个非常愚蠢的问题,请原谅我.我不打算在这里开始一场C < - > C++战争,只是想弄清楚实施野兽的局限性,比如标准库...

谢谢!

c++ implementation standard-library

2
推荐指数
1
解决办法
845
查看次数

如何在Haskell中编写Deque数据类型

如何在Haskell中编写一个双端队列("deque").数据结构应该具有emptyDeque,front,back,removeFront,removeBack,addFront,addBack和isEmpty等函数,然后在 - >和< - 之间显示双端队列.

这是相同的,但对于一个队列:

module Queues (Queue, emptyQueue, front, remove, add, isEmpty)
   newtype Queue a = Queue [a]
   emptyQueue = Queue []
   front  (Queue (x:xs)) = x
   front (Queue []) = error("No front of empty queue")
   add (Queue xs) x = Queue (xs ++ [x])
   remove (Queue (x:xs)) = Queue xs
   remove (Queue []) = error("Nothing on queue to remove")
   isEmpty (Queue []) = True
   isEmpty (Queue (x:xs)) = False
   showElems [] = ""
   showElems (x:xs) = " …
Run Code Online (Sandbox Code Playgroud)

implementation haskell types deque

2
推荐指数
1
解决办法
1261
查看次数

C#:Interface和Abstract来启用实现和覆盖

我必须设计大约5个不同的课程.

这些类的许多部分将非常相似,但它们会有轻微的差异(当然).

如果我写了interface一个我设计的每个类都实现了,那么必须完全编写每个abstract方法interface.

如果我编写一个我的base每个设计类派生的类,那么每个类将自动在virtual我在base类中创建的方法中具有一些功能,但是它们都需要被覆盖,调用base功能,包含细微的差异.

有没有办法结合这些功能?我喜欢要求实现interface的方法,但我也喜欢设置由base类预先编程的功能.

我在这里和其他地方看过很多例子,但看起来并没有人像我所描述的那样.它甚至可能吗?

编辑:所以,鉴于此:

abstract class Base
{
    virtual protected void OptionallyOverridable() {}
    abstract protected void SubclassMustImplement();
}
Run Code Online (Sandbox Code Playgroud)

...有没有办法写出这样的东西:

abstract class Base2
{
    DataEventType EventType;
    DataChangedEventHandler OnDataChange;

    virtual protected void OptionallyOverridable() {}
    abstract protected void SubclassMustImplement() {
      // values here are guaranteed
    }
}
Run Code Online (Sandbox Code Playgroud)

c# implementation overriding interface abstract

2
推荐指数
1
解决办法
6751
查看次数

如何创建一个行为像真正的数组的构造函数?

如何创建自定义数组构造函数,它是本机Array构造函数的扩展版本?

例如,jQuery看起来像一个带有其他方法的数组,例如$().addClass.但是,它没有修改Array.prototype,因为new Array().hasClassundefined.

那么,如何在不修改的情况下创建扩展数组实现Array.prototype呢?

例:

Employees( ... )          //-> [{name: 'John', age: 32}, {name: 'Bob', age: 29}];
Employees( ... ).byAge(32)//-> [{name: 'John', age: 32}];
// and
Array().byAge             //-> undefined
Run Code Online (Sandbox Code Playgroud)

javascript arrays implementation constructor class

2
推荐指数
1
解决办法
267
查看次数

纯C/C++中的二进制序列化

我想自己实现二进制序列化,而不使用Boost或任何其他第三方库.

在C++中,实现它的最简单方法是使用ofstream然后通过网络发送二进制文件.但是有没有其他流类可以用作临时缓冲区以避免将文件写入磁盘?

另外,我怎样才能在纯C中实现这一目标?

c c++ binary implementation serialization

2
推荐指数
1
解决办法
8971
查看次数

如何在现代JVM实现中实现instanceof?

由于在其他线程中完成了基准测试(参见/sf/answers/27833221/),因此可以看出Java 6中的instanceof实际上非常快.这是如何实现的?

我知道对于单继承,最快的想法是使用一些嵌套间隔编码,其中每个类维持[低,高]间隔,而instanceof只是间隔包含测试,即2个整数比较.但它是如何制作接口的(因为区间包含仅适用于单继承)?如何处理类加载?加载新的子类意味着必须调整很多间隔.

java implementation jvm instanceof

2
推荐指数
1
解决办法
1775
查看次数

在Objective-C xcode中实现.m文件中的分配和初始化

我正在尝试在我的程序的实现部分下初始化一个对象,因为我打算为多个方法使用相同的对象.我试图做到这一点我得到了一个错误,我只是想知道为什么.以下是一些示例:

@implementation Fraction {
    NSString *test = [[NSString alloc] init];
}
Run Code Online (Sandbox Code Playgroud)

要么

@implementation Fraction {
    int x = 0;
}
Run Code Online (Sandbox Code Playgroud)

虽然如果不初始化变量,它们可以正常工作而不会出现任何错误或警告.我确定这是代码的设计方式,但我只是好奇为什么.提前感谢您的回答!

implementation allocation initialization objective-c

2
推荐指数
1
解决办法
2727
查看次数

为什么C和Ruby之间的模运算符(%)的行为对于负整数是不同的?

我在这里运行一些代码.我试过了-40 % 3.它给了我输出2.当我在C中执行相同的操作时,我得到:

int i = (-40) % 3
printf("%d", i);
Run Code Online (Sandbox Code Playgroud)

输出是

-1
Run Code Online (Sandbox Code Playgroud)

两种语言如何在内部执行模运算?

c ruby math implementation modulo

2
推荐指数
1
解决办法
1302
查看次数