指向重载强制转换操作符的指针

Pointer to overloaded casting operator?

本文关键字:操作符 指针 转换 重载      更新时间:2023-10-16

假设我有以下类:

class MyStringClass
{
public:
    operator const char*() const;
};

如果可能的话,我如何创建一个函数指针到这个重载的强制转换操作符?

基本上,我想使用boost::phoenix来调用这个操作符。我假设我需要绑定到它(因此我需要创建一个指向它的函数指针),但是如果boost::phoenix已经内置了以特殊方式调用它的功能,我也愿意这样做。

我使用的是Visual Studio 2008, c++ 03.

const char* (MyStringClass::*ptr)() const = &MyStringClass::operator const char*;

直接使用phx::static_cast_: Live On Coliru

int main()
{
    auto implicit_conversion = phx::static_cast_<const char*>(arg1);
    std::vector<MyStringClass> v(10);
    std::for_each(v.begin(), v.end(), implicit_conversion);
}
Live On Coliru
namespace detail
{
    template <typename T>
    struct my_cast 
    {
        template <typename U> struct result { typedef T type; };
        template <typename U>
        T operator()(U v) const { 
            return static_cast<T>(v);
        }
    };
}
namespace phx = boost::phoenix;
using namespace phx::arg_names;
int main()
{
    phx::function<detail::my_cast<const char*>> to_csz;
    std::vector<MyStringClass> v(10);
    std::for_each(v.begin(), v.end(), to_csz(arg1));
}