- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当使用带有重载输入/输出运算符的自定义类的 boost::lexical cast 时,我在 Max OSX 上编译时得到一个不明确的重载运算符>>。在这种情况下,Boost 1.59 是使用 Macports 安装的。
下面是一个说明错误和预期结果的独立示例:
#include <iostream>
#include <string>
#include <sstream>
#ifdef __DEMO__
#include <boost/lexical_cast.hpp>
#endif
using namespace std;
enum BoolYN_ENUM { FALSE_YN, TRUE_YN, UNSET_YN};
class BoolYN{
public:
BoolYN() : _dat(UNSET_YN){}
BoolYN(const BoolYN& o) : _dat(o._dat) {}
BoolYN& operator=(const BoolYN_ENUM& val){ _dat = val; return *this;}
BoolYN& operator=(const BoolYN& o){ _dat = o._dat; return *this;}
operator const char*() const{
switch(_dat){
case FALSE_YN:
return "F";
case TRUE_YN:
return "T";
default:
return "U";
}
}
operator int() const {return _dat;}
private:
BoolYN_ENUM _dat;
};
istream& operator>>(istream& is, BoolYN& obj){
string token;
is >> token;
if(token.size() > 0){
char s = token[0];
if(s == 'Y' || s == 'y'){
obj = TRUE_YN;
} else if (s == 'N' || s == 'n') {
obj = FALSE_YN;
} else {
obj = UNSET_YN;
}
} else {
obj = UNSET_YN;
}
return is;
}
ostream& operator<<(ostream& os, BoolYN& obj){
os << (const char*) obj;
return os;
}
int main(int argc, char** argv){
for(int i=1; i<argc; i++){
string argi(argv[i]);
#ifndef __DEMO__
stringstream ss(argi);
BoolYN boolval;
ss >> boolval;
#else
BoolYN boolval = boost::lexical_cast<BoolYN>(argi);
#endif
cout << "Argument " << i << ": " << boolval << endl;
}
return 0;
}
为了说明所需的行为,只需使用适当的包含路径进行编译。参数在命令行上给出,并使用重载的 << 和 >> 运算符进行适当解析。
$ g++ main.cpp
$ a.out Yes No IDK
Argument 1: T
Argument 2: F
Argument 3: U
要改为使用 boost::lexical_cast,请使用“-D__DEMO__”进行编译,这会给出以下错误:
In file included from main.cpp:6:
In file included from /opt/local/include/boost/lexical_cast.hpp:32:
In file included from /opt/local/include/boost/lexical_cast/try_lexical_convert.hpp:35:
In file included from /opt/local/include/boost/lexical_cast/detail/converter_lexical.hpp:39:
In file included from /opt/local/include/boost/type_traits/has_right_shift.hpp:43:
/opt/local/include/boost/type_traits/detail/has_binary_operator.hpp:158:70: error: use of overloaded operator '>>' is ambiguous (with operand types 'std::__1::basic_istream<wchar_t>' and 'BoolYN')
BOOST_STATIC_CONSTANT(bool, value = (sizeof(s_check(((make<Lhs>() BOOST_TT_TRAIT_OP make<Rhs>()),make<has_operator>())))==sizeof(::boost::type_traits::yes_type)));
... (very long error msg. truncated) ...
在 Linux Boost v. 1.51 上,无论有没有“-D__DEMO__”,代码都能正常工作。任何想法/提示将不胜感激!
最佳答案
我没有你的环境来精确分析。然而,看起来有一个图书馆候选人operator>>
它与 lexical_cast 实现传递的第一个参数有更好的匹配,但(自然地)与 BoolYN
的匹配较差争论。特别注意诊断中的操作数类型是 basic_stream<wchar_t>
,而你的 operator>>
需要 istream
( basic_istream<char>
,我相信)。所以也许你可以通过制作 operator>>
来解决这个问题具有流字符类型的模板作为模板参数。
关于c++ - 模糊运算符>> 在 Mac OSX 上使用 Boost 1.59 lexical_cast,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32401849/
Or 运算符 对两个表达式进行逻辑“或”运算。 result = expression1 Or expression2 参数 result 任意数值变量。 expression1 任意
Not 运算符 对表达式执行逻辑非运算。 result = Not expression 参数 result 任意数值变量。 expression 任意表达式。 说明 下表显示如何
Is 运算符 比较两个对象引用变量。 result = object1 Is object2 参数 result 任意数值变量。 object1 任意对象名。 object2 任意
\ 运算符 两个数相除并返回以整数形式表示的结果。 result = number1\number2 参数 result 任意数值变量。 number1 任意数值表达式。 numbe
And 运算符 对两个表达式进行逻辑“与”运算。 result = expression1 And expression2 参数 result 任意数值变量。 expression1
运算符(+) 计算两个数之和。 result = expression1 + expression2 参数 result 任意数值变量。 expression1 任意表达式。 exp
我对此感到困惑snippet : var n1 = 5-"4"; var n2 = 5+"4"; alert(n1); alert(n2); 我知道 n1 是 1。那是因为减号运算符会将字符串“4”转
我想我会得到 12,而不是 7。 w++,那么w就是4,也就是100,而w++, w 将是 8,1000;所以 w++|z++ 将是 100|1000 = 1100 将是 12。 我怎么了? int
Xor 运算符 对两个表达式进行逻辑“异或”运算。 result = expression1 Xor expression2 参数 result 任意数值变量。 expression1
Mod 运算符 两个数值相除并返回其余数。 result = number1 Mod number2 参数 result 任意数值变量。 number1 任意数值表达式。 numbe
Imp 运算符 对两个表达式进行逻辑蕴涵运算。 result = expression1 Imp expression2 参数 result 任意数值变量。 expression1 任
Eqv 运算符 执行两个表达式的逻辑等价运算。 result = expression1 Eqv expression2 参数 result 任意数值变量。 expression1 任
我有一个运算符重载的简单数学 vector 类。我想为我的运算符(operator)获取一些计时结果。我可以通过计时以下代码轻松计时我的 +=、-=、*= 和/=: Vector sum; for(s
我是用户定义比较运算符的新手。我正在读一本书,其中提到了以下示例: struct P { int x, y; bool operator、运算符<等),我们
在 SQL 的维基百科页面上,有一些关于 SQL 中 bool 逻辑的真值表。 [1] 维基百科页面似乎来源于 SQL:2003 标准。 等号运算符 (=) 的真值表与 SQL:2003 草案中的 I
我遇到了一个奇怪的 C++ 运算符。 http://www.terralib.org/html/v410/classoracle_1_1occi_1_1_number.html#a0f2780081f
我正在阅读关于 SO 和 answers 中的一个问题,它被提到为: If no unambiguous matching deallocation function can be found, pr
我偶然发现了这个解决方案,但我无法理解其中到底发生了什么。谁能解释一下! 据我了解,它试图通过计算一半的单元格然后将其加倍来计算 a*b 网格中的单元格数量。但是我无法理解递归调用。 请不要建议其他解
Go的基本类型 布尔类型bool 长度:1字节 取值:布尔类型的取值只能是true或者false,不能用数字来表示 整型 通用整型 int / uint(有符号 / 无符号,下面也类似) 长度:根据运
在本教程中,您将学习JavaScript中可用的不同运算符,以及在示例的帮助下如何使用它们。 什么是运算符? 在JavaScript中,运算符是一种特殊符号,用于对运算数(值和变量)执行操作。例如,
我是一名优秀的程序员,十分优秀!