如何处理具有相同命名空间的多个导入?
How to handle multiple imports that have the same namespace?
我正在开发一个 C++ 命令行应用程序,它是一个组件对象模型 (COM) 客户端。有两个 COM 服务器实现,我想在我的程序中支持它们(可通过应用程序参数选择)。
两台服务器都在使用相同的命名空间 OmniRig,所以一切都会发生冲突。我试图将它们拆分为单独的 类 以避免冲突,但这没有用。是否可以同时支持这两种 COM 服务器,我将如何去做?
OmniRigV1.h:
#include "OmniRigBase.h"
#import "C:\Program Files (x86)\Afreet\OmniRig\OmniRig.exe"
using namespace OmniRig;
class OmniRigV1 : public OmniRigBase {...}
OmniRigV2.h:
#include "OmniRigBase.h"
#import "C:\Program Files (x86)\Omni-Rig V2\omnirig2.exe"
using namespace OmniRig;
class OmniRigV2 : public OmniRigBase {...}
main.cpp:
int main(int argc, char* argv[])
{
ProgramOptions options(argc, argv);
OmniRigBase* omnirig;
switch (options.getOmnirigVersion()) {
case OmniRigVersion::OmniRigVersion1:
omnirig = new OmniRigV1(options);
break;
case OmniRigVersion::OmniRigVersion2:
omnirig = new OmniRigV2(options);
break;
default:
exit(E_OPTION_OMNIRIG_VERSION);
}
...
完整代码位于:
https://github.com/cniesen/IcomClockOmniRig/tree/adf7ce1b0ef716ec2f72d50bffbada4e811a52cf/src
正如评论中提到的 Ingor,我需要将 rename_namespace
选项与 #import
指令一起使用:
#import "C:\Program Files (x86)\Afreet\OmniRig\OmniRig.exe" rename_namespace("OmniRig1")
和
#import "C:\Program Files (x86)\Omni-Rig V2\omnirig2.exe" rename_namespace("OmniRig2")
现在可以使用适当的名称访问每个实现,例如 OmniRig1::OmniRigX
和 OmniRig2::OmniRigX
归功于 Ingor。
我正在开发一个 C++ 命令行应用程序,它是一个组件对象模型 (COM) 客户端。有两个 COM 服务器实现,我想在我的程序中支持它们(可通过应用程序参数选择)。
两台服务器都在使用相同的命名空间 OmniRig,所以一切都会发生冲突。我试图将它们拆分为单独的 类 以避免冲突,但这没有用。是否可以同时支持这两种 COM 服务器,我将如何去做?
OmniRigV1.h:
#include "OmniRigBase.h"
#import "C:\Program Files (x86)\Afreet\OmniRig\OmniRig.exe"
using namespace OmniRig;
class OmniRigV1 : public OmniRigBase {...}
OmniRigV2.h:
#include "OmniRigBase.h"
#import "C:\Program Files (x86)\Omni-Rig V2\omnirig2.exe"
using namespace OmniRig;
class OmniRigV2 : public OmniRigBase {...}
main.cpp:
int main(int argc, char* argv[])
{
ProgramOptions options(argc, argv);
OmniRigBase* omnirig;
switch (options.getOmnirigVersion()) {
case OmniRigVersion::OmniRigVersion1:
omnirig = new OmniRigV1(options);
break;
case OmniRigVersion::OmniRigVersion2:
omnirig = new OmniRigV2(options);
break;
default:
exit(E_OPTION_OMNIRIG_VERSION);
}
...
完整代码位于: https://github.com/cniesen/IcomClockOmniRig/tree/adf7ce1b0ef716ec2f72d50bffbada4e811a52cf/src
正如评论中提到的 Ingor,我需要将 rename_namespace
选项与 #import
指令一起使用:
#import "C:\Program Files (x86)\Afreet\OmniRig\OmniRig.exe" rename_namespace("OmniRig1")
和
#import "C:\Program Files (x86)\Omni-Rig V2\omnirig2.exe" rename_namespace("OmniRig2")
现在可以使用适当的名称访问每个实现,例如 OmniRig1::OmniRigX
和 OmniRig2::OmniRigX
归功于 Ingor。