tribool给我的印象是Boost最奇怪的地方之一。我看到它与使用枚举相比有一些便利,但枚举也可以很容易地扩展代表3个以上的状态。在真实的世界中,你以什么方式使用tribool?
xoefb8l81#
虽然我没有使用过C++,因此也没有使用过boost,但我在一个需要将状态存储为true/false/pending的网络应用程序中相当广泛地使用了三状态变量。
mpgws1up2#
任何值类型中的额外状态都可能是极其有价值的,它避免了使用“幻数”或额外的标志来确定变量的值是“可能”还是“未知”。tribool的状态不是true或false,而是true、false或indeterminate。假设您有一个包含customers及其dateOfBirth列表的数据库,那么您可以编写一个沿着所示的函数:
tribool
true
false
indeterminate
customers
dateOfBirth
tribool IsCustomerAdult(customerName);
函数返回:
`true` if the customer is 18 or older; `false` if the customer is less than 18; `indeterminate` if the customer is not in the database (or the dateOfBirth value is not present).
非常有用。
hc8w905p3#
我认为额外的好处不仅是第三值,而且你可以很容易地使用3值逻辑!例如:
(true && indeterminate) == indeterminate (true || indeterminate) == true
SQL实现这样的逻辑。
yrwegjxp4#
我见过很多这样的例子:两个布尔值被用来表示三种可能的状态,无论是明确的还是不明确的,而第四种状态被默认为不可能。
az31mfrm5#
我是Boost库的忠实粉丝,并开始在我离开的公司使用它。在整个项目中广泛接触和使用Boost库后,我偶然发现了tribool,并正在考虑使用一些需要改进的“模糊逻辑”算法。在我有机会进入它之前,我离开了,但是除了“模糊逻辑”的例子,系统中的其他模块也有这种状态之间的组件,考虑到现在,如果我还在公司的话,我可能会在相当数量的代码中使用tribool。
fjaof16o6#
我认为它对于语言建模非常有用,例如OCR应用和语音合成,因为正如你所知道的,人类语言是模糊的,它们有很多中间状态展望利用摩擦学改进现有技术
6条答案
按热度按时间xoefb8l81#
虽然我没有使用过C++,因此也没有使用过boost,但我在一个需要将状态存储为true/false/pending的网络应用程序中相当广泛地使用了三状态变量。
mpgws1up2#
任何值类型中的额外状态都可能是极其有价值的,它避免了使用“幻数”或额外的标志来确定变量的值是“可能”还是“未知”。
tribool
的状态不是true
或false
,而是true
、false
或indeterminate
。假设您有一个包含
customers
及其dateOfBirth
列表的数据库,那么您可以编写一个沿着所示的函数:函数返回:
非常有用。
hc8w905p3#
我认为额外的好处不仅是第三值,而且你可以很容易地使用3值逻辑!
例如:
SQL实现这样的逻辑。
yrwegjxp4#
我见过很多这样的例子:两个布尔值被用来表示三种可能的状态,无论是明确的还是不明确的,而第四种状态被默认为不可能。
az31mfrm5#
我是Boost库的忠实粉丝,并开始在我离开的公司使用它。在整个项目中广泛接触和使用Boost库后,我偶然发现了tribool,并正在考虑使用一些需要改进的“模糊逻辑”算法。
在我有机会进入它之前,我离开了,但是除了“模糊逻辑”的例子,系统中的其他模块也有这种状态之间的组件,考虑到现在,如果我还在公司的话,我可能会在相当数量的代码中使用tribool。
fjaof16o6#
我认为它对于语言建模非常有用,例如OCR应用和语音合成,因为正如你所知道的,人类语言是模糊的,它们有很多中间状态
展望利用摩擦学改进现有技术