c++ - c++构造函数/typedef的扩展

标签 c++ error-handling typeof unicode-string

Borland C++Builder 中 C++ 构造函数的扩展。

我有一些连接 UnicodeString 的代码值(以前的 AnsiString )。

UnicodeString string="test1";
Variant v1="test";
string = string + UnicodeString(v1);

[bcc32 Error] myTest.cpp(154): E2015 Ambiguity between 'System::UnicodeString::UnicodeString(const System::UnicodeString &) at c:\program files (x86)\embarcadero\studio\17.0\include\windows\rtl\ustring.h:86' and 'System::UnicodeString::UnicodeString(const wchar_t *) at c:\program files (x86)\embarcadero\studio\17.0\include\windows\rtl\ustring.h:89'



现在,问题是 Variant是模棱两可的,编译器提示这种模棱两可(很公平)。

如果我将直接转换添加到 string ,它工作正常。
string = string + UnicodeString(v1.As<UnicodeString>());

问题是我的代码很大,而且有成千上万个这样的代码。我想介绍一个新的显式 typedef 或宏来执行此操作:

给定参数 v1 是 Variant ,它执行而不是这个:
UnicodeString(v1)

它改为执行此操作:
UnicodeString(v1.As<UnicodeString>())

我知道这可以通过以某种方式(不确定如何)扩展 UnicodeString 的构造函数或 typedef 来实现通过添加 UnicodeString(Variant)(或宏?)。

PS。 UnicodeString是系统类,所以不能直接修改。

PS1。 AnsiString 也有同样的问题(甚至更多的代码片段)。 .制作函数不起作用:(。对于AnsiString它不起作用:(。
AnsiString 的定义在系统头文件(sysmac.h)中:
typedef AnsiStringT<0> AnsiString;

例子:
AnsiString myTest::AnsiString(Variant v)
{
    return "";
}

[bcc32 Error] .cpp(122): E2235 Member function must be called or its address taken

最佳答案

我认为您正在尝试做的事情会严重损害代码的可读性。更改内置类的构造函数(即使有可能)肯定会让任何阅读您的代码的人感到惊讶。更好的解决方案是在某处添加一个函数

void addVariantToUnicodeString(UnicodeString& string, Variant& v){
    string = string + UnicodeString(v1.As<UnicodeString>());
}

或类似的东西(可能使用模板)。现在只需相应地替换您的代码。作为一个额外的好处,您的代码现在将清楚地说明它正在做什么,而不是简单地执行晦涩的字符串操作。当然,您也可以构建自己的字符串管理类来提供您需要的功能。这稍微取决于您的问题的复杂性和程度。

关于c++ - c++构造函数/typedef的扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34809152/

相关文章:

c++ - 如何用 C++ 创建正方形、三角形、矩形或圆形并将其保存到可移植位图文件?

r - svd(X): infinite or missing values in 'x' . when using BacktestVaR in GAS中的错误

c# - Unity C#中的更多脚本问题

javascript - 当 typeof 在函数上运行时,它返回 "function"作为类型。为什么它不返回 "object"?

c# - 如何将 Object 转换为其实际类型?

c++ - 构建 32 位库 opencv

c++ - gcc 拒绝内联请求

c++ - 为什么需要第二个 cin.ignore() ?

java - 如果正在读取的文件格式不正确,请关闭程序吗?

c# - 获取没有完整命名空间的类型名称