gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 08:53:23 27 4
gpt4 key购买 nike

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com