T :: *在模板参数中的含义是什么?

时间:2015-11-04 20:53:32

标签: c++ templates metaprogramming template-meta-programming type-deduction

遵循here中的文章:

我遇到了这段代码(为了清晰起见而缩短和更改):

template <class T> struct hasSerialize
{
    // This helper struct permits us to check that serialize is truly a method.
    // The second argument must be of the type of the first.
    // For instance reallyHas<int, 10> would be substituted by reallyHas<int, int 10> and works!
    // reallyHas<int, &C::serialize> would be substituted by reallyHas<int, int &C::serialize> and fail!
    // Note: It only works with integral constants and pointers (so function pointers work).
    // In our case we check that &C::serialize has the same signature as the first argument!
    // reallyHas<std::string (C::*)(), &C::serialize> should be substituted by 
    // reallyHas<std::string (C::*)(), std::string (C::*)() &C::serialize> and work!
    template <typename U, U u> struct reallyHas;

    // We accept a pointer to our helper struct, in order to avoid to instantiate a real instance of this type.
    // std::string (C::*)() is function pointer declaration.
    template <typename C>
    static char&
    test(reallyHas<std::string (C::*)(), &C::serialize>* /*unused*/) { }
};

所以这个

std::string (C::*)()
引起了我的注意。

任何人都可以向我解释C::*部分吗?这是一个返回std::string的函数指针,但还有什么呢?

1 个答案:

答案 0 :(得分:4)

指向C类中返回std::string

的成员的成员函数指针

检查isocpp.org以获取有关成员函数指针的更多信息。