Template 模板方法的特化

发布于 2024-11-17 22:37:46 字数 801 浏览 2 评论 0原文

好吧,我有:

template<typename T>
class Reader
{
    class Input
    {
        template<typename C>
        void operator()(C& val) const
        {
            /* Do Some Work */
        }
    };
};

不幸的是,“做一些工作”的通用版本对我不起作用。它也不容易修改,因为它位于一些繁重的模板元编程代码的中间。

所以我想我可以专门针对我的类型使用该方法。所以我的第一步是尝试将通用方法从课堂中拉出来。

template<typename T>
class Reader
{
    class Input
    {
        template<typename C>
        void operator()(C& val) const;
    };
};


template<typename T>
template<typename C>
void typename Reader<T>::Input template operator()<C>(C& val) const   // LINE 13
{
    /* Do Some Work */
}

不幸的是我收到错误:

sh:13: 错误:错误:在“&”之前应有“)”令牌

OK I have:

template<typename T>
class Reader
{
    class Input
    {
        template<typename C>
        void operator()(C& val) const
        {
            /* Do Some Work */
        }
    };
};

Unfortunately the generic version of "Do Some Work" does not work for me. Nor it is easy to modify because it is in the middle of some heavy template meta programming code.

So I though I could specialize the method for my type. So my first step was to try and pull the general method out of the class.

template<typename T>
class Reader
{
    class Input
    {
        template<typename C>
        void operator()(C& val) const;
    };
};


template<typename T>
template<typename C>
void typename Reader<T>::Input template operator()<C>(C& val) const   // LINE 13
{
    /* Do Some Work */
}

Unfortunately I am getting the error:

s.h:13: error: error: expected ‘)’ before ‘&’ token

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

稳稳的幸福 2024-11-24 22:37:46

只是像平常一样编写它

template<typename T>
template<typename C>
void Reader<T>::Input::operator()(C& val) const   // LINE 13
{
    /* Do Some Work */
}

在类之外定义通用版本并不能帮助您提供它的特殊版本,或者我确实错过了您在这里的目标。

Just write it like normal

template<typename T>
template<typename C>
void Reader<T>::Input::operator()(C& val) const   // LINE 13
{
    /* Do Some Work */
}

Defining the generic version out of class doesn't help you with providing special versions of it though, or I do miss the goal of yours here.

提笔书几行 2024-11-24 22:37:46

我想这是不可能的,因为它算作部分函数模板专业化,这是不允许的。 void Reader::Input::operator () (C& int) 有一个 Reader类型的隐式第一个参数(this 指针) ;::Input *,因此其签名实际上是 void (Reader::Input *, C &)。您正在尝试指定 C,但不是 T

I guess it is impossible as it counts as partial function template specialization, which is not allowed. void Reader<T>::Input::operator () (C& int) has an implicit first argument (the this pointer) of type Reader<T>::Input *, hence its signature is in fact void (Reader<T>::Input *, C &). You are trying to specify C, yet not T.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文