我有一些应用程序和静态库的 C++ 解决方案:
- UserRace1.exe
- UserRace2.exe
- 绿体.lib
- 蓝体.lib
- RedBody.lib
- BigWheels.lib
- MiddleWheels.lib
- SmallWheels.lib
- V8Engine.lib
- V12Engine.lib
- RaceTires.lib
- WinterTires.lib
- 简单轮胎.lib
- 车库.lib
在应用程序中,我只是模拟比赛,每场比赛一个应用程序。库由描述汽车部件(车身、车轮、发动机等)的类组成。每个类都实现了一些接口(IBody、IWheels、IEngine 等),这些接口在 Garage lib 中进行了描述。Garage.lib 应该使用零件来制造汽车。
因此,我将汽车参数传递给应用程序,例如: -Car1 -RedBody -MiddleWheels -V8Engine -RaceTires -Car2 -BlueBody -SmallWheels -V12Engine -WinterTires 。应用调用 Garage 类: Garage::GetCar(string body, stringwheels, string engine, string Tire) 和车库返回 Car 对象,我们在 app 中使用。请注意,我将这个参数像字符串一样传递。这一点很重要。
现在,关于我想要什么。我只写车库库。其他库将由其他人编写。我希望我的图书馆是通用的。此时,当添加新部分(例如 BlackBody.lib)时,我必须在 Garage.lib 中添加对此的支持。就像是:
...
else if (body == "RedBody")
{
car->body = new RedBody();
}
else if (body == "BlackBody")
{
car->body = new BlackBody();
}
...
但我想动态地获得这种类型。喜欢:
foreach (Librarian lib in Application.GetLibs())
{
foreach (Type type in lib)
{
if (type is IBody)
{
if (((IBody)type)::GetColor() == color)
{
car->body = type.GetInstance();
return;
}
}
}
}
然后,如果有人添加新类型,我不会更改我的库。问题是,我写的是 C++,而不是 C#。而且我不知道如何实现它。
也许我应该使用 dll 而不是静态库?这是唯一的方法吗?如果是这样,应用程序和 dll 使用一个库(Garage.lib)是否会出现问题?因为它们使用不同的运行时库(/MT 和 /MD)。