(提升)为什么我们需要泛型?
|
为什么我们需要在Boost库中指定通用类型?模板不够吗?
例如,如果我想要特定类型的容器,我将这样做:
template<class Type>
vector<Type> v;
如果我想指定一个包含所有内容的容器,我只需编写:
vector v;
在对boost :: any的解释中(http://www.boost.org/doc/libs/1_46_1/doc/html/any/s02.html)
转换可以容纳其中一种的类型
多种可能的值类型,例如
int和string,并自由转换
他们之间,例如
将5解释为\“ 5 \”,反之亦然。
这些类型在脚本编写和
其他解释语言。
boost :: lexical_cast支持这样的
转换功能。
为什么我们需要像PHP这样的脚本语言中的隐式类型?
此外,在boost :: any示例中,为什么:
using boost::any_cast;
typedef std::list<boost::any> many;
void append_int(many & values, int value)
{
boost::any to_append = value;
values.push_back(to_append);
}
可以接受吗?容器是否使用在boost :: any中实现的operator =?
any & operator=(const any &);
这使得boost ::任何能够容纳任何类型的东西吗?在boost :: any中定义的运算符=解释为:
效果:将rhs的内容复制到
当前实例,丢弃上一个
内容,以便新内容是
在类型和值上等效于
rhs的内容,如果为空,则为空
rhs.empty()。
抛出:std :: bad_alloc或任何
复制产生的例外
包含类型的构造函数。
任务满足强者
保证异常安全。
http://www.boost.org/doc/libs/1_46_1/doc/html/boost/any.html
没有找到相关结果
已邀请:
3 个回复
藕挝
是语法错误,因为vector不是类(它是一个类模板,可以通过为其提供模板参数将其实例化为类)。 C ++中有某种通用类型,即
,但您有责任记住存储在其中的内容(尤其是出于删除目的)。
是一种类型安全的替代方案,它会记住您存储在其中的内容,并且如果您尝试将其转换为未定义转换的内容,则会产生错误(您仍然必须向
询问实际值)。 至于
,是的,它被容器使用。标准容器通常要求元素类型是默认可构造和可分配的,这意味着它们需要具有工作副本构造函数和赋值运算符。通常,它们不必是默认可构造的,或者仅在使用某些操作时才必须是默认可构造的。
河饶办斜施
闯舱酮
类型 分辨率是运行时。
是你其中的一件事 应尽可能避免,但在少数情况下应避免使用 有道理,您真的需要它-其他任何事情都不会做。