gpt4 book ai didi

C++ 显式函数签名

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:19:24 25 4
gpt4 key购买 nike

我想创建一个针对变体类型结构的辅助包装器,这样类型签名就会调用必要的转换,例如:

variant CreateVariant(bool value);
variant CreateVariant(int value);
variant CreateVariant(char *value);

问题是 bool 和 int,因为它们是隐式可转换类型...

所以对于这样的代码:

variant a = CreateVariant((BOOL)value);
variant a = CreateVariant((__int64)value);
variant a = CreateVariant(1);

有一些问题。

如果我需要将 bool 处理为 bool 值并将 unigned/signed int/uints/longs/longlongs 处理为整数类型,我该如何设计一个干净的包装器?

对于类构造函数,我可以使用 explicit 关键字,但我必须在我正在更新的代码中使用函数。

最佳答案

正如评论所暗示的那样,您问题的答案在于区分“bool”(真正的 bool 类型)和 BOOL(int 的 MS typedef)。

不过,在更广泛的主题上,我在代码中做了完全相同的事情。如果您使用的是 MS 平台,请考虑使用 _variant_t 或 CComVariant:两者基本上都能满足您的需求。我最终使用默认情况下传递给底层父类(在本例中为 _variant_t)的模板创建了自己的转换类,并为没有内置转换为 MS 类类型的构造函数类型添加了特化。您将必须为基础类型中没有转换的每种类型添加特化,但通常这还不错。

我应该补充:

这样做的好处是不会有隐式转换。如果类型与显式覆盖匹配,它将被使用。否则,它将匹配模板,并传递给 MS 类型。如果 MS 类型不能接受传递的类型,您将收到编译时错误,并知道您需要解决什么问题。

关于C++ 显式函数签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9577579/

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