我尝试实现一个仿函数版本,static_cast
用于std::bind()
.
我知道 Boost ll_static_cast<K>()
(请参阅using static_cast with boost::bind),但我现在没有使用 Boost。
为什么有几个标准运算符没有标准函子中有一个代码示例?但它不会在 GCC 4.2.1 上编译:
template <typename Target>
struct StaticCast
{
template <typename Source>
Target operator()(Source&& source) const
{
return static_cast<Target>(source);
}
}
我设法编译了一些东西,但我不确定它是否正确:
template <class Target>
struct StaticCast : public std::unary_function<void, Target> {
template <class Source>
Target operator()(Source& src) const {
return static_cast<Target>(src);
}
};
有人可以告诉我这个版本是否正确,如果是这样,为什么我需要std::unary_function
前面的代码示例中没有使用的版本?
用法:
std::vector<BaseObject*> vec; // BaseObject* are known to be of type
// DerivedObject* of course, please don't ask me how or why...
std::for_each(vec.begin(), vec.end(),
std::bind(&DerivedObject::doStuff,
std::bind(StaticCast<DerivedObject*>(), std::placeholders::_1),
"with some string"));