我想创建针对变异型结构的辅助包装,所以这种类型的签名会召唤必要的转换,如:C++明确的函数签名
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);
有一些问题。
如何设计一个干净的包装,如果我需要作为布尔和整数类型的布尔和未签名的int/uints/longs/longlongs处理布尔?
对于类构造函数,我可以使用explicit
关键字,但是我必须在我正在更新的代码中使用函数int。
我认为这里的问题是'BOOL'类型只是'int'的'typedef'。我不认为在这种情况下有什么办法可以消除这两者的歧义,尽管我可能是错的。 – templatetypedef 2012-03-06 03:45:06
我看不到问题。我尝试用'bool','int'和'__int64_t'重载一个函数,并且每次都能够区分每一个函数。 – howardh 2012-03-06 03:56:22
@ howardh-请注意,该示例使用'BOOL'而不是'bool'。 'BOOL'是'int'的微软'typedef',因此是这个问题。 – templatetypedef 2012-03-06 04:01:04