可变参数模板 - 有没有办法避免重复

发布于 2024-12-14 22:45:15 字数 809 浏览 3 评论 0原文

在代码中(只需粘贴和复制)有一种方法可以避免重复/列出模板参数(代码中标记的行):

#include <iostream>

using namespace std;


template<class T,class... V>
struct nullptr_
{
    nullptr_(T& obj,V&... args)
    {
        nullptr_hlp(obj,args...);
    }

    template<class A>
    static void nullptr_hlp(A& a);
    {
        a = nullptr;
    }

    template<class A,class... Vs>
    static void nullptr_hlp(A& a,Vs&... args)
    {
        a = nullptr;
        nullptr_hlp(args...);
    }

};


class X : nullptr_<int*,double*,char*>//IS THERE A WAY TO HAVE JUST nullptr_?
{

    int* a;
    double* b;
    char* c;
    typedef nullptr_<decltype(a),decltype(b),decltype(c)> init_;
public:
    X():init_(a,b,c)
    {

    }

};
int main()
{
   X x;
    return 0;
}

In code (just paste and copy)is there a way to avoid repetition/listing of template args(line marked in code):

#include <iostream>

using namespace std;


template<class T,class... V>
struct nullptr_
{
    nullptr_(T& obj,V&... args)
    {
        nullptr_hlp(obj,args...);
    }

    template<class A>
    static void nullptr_hlp(A& a);
    {
        a = nullptr;
    }

    template<class A,class... Vs>
    static void nullptr_hlp(A& a,Vs&... args)
    {
        a = nullptr;
        nullptr_hlp(args...);
    }

};


class X : nullptr_<int*,double*,char*>//IS THERE A WAY TO HAVE JUST nullptr_?
{

    int* a;
    double* b;
    char* c;
    typedef nullptr_<decltype(a),decltype(b),decltype(c)> init_;
public:
    X():init_(a,b,c)
    {

    }

};
int main()
{
   X x;
    return 0;
}

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

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

发布评论

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

评论(2

相思故 2024-12-21 22:45:15

nullptr_ 成为 X 中的注入类名,因此您可以在没有参数列表的情况下引用它:

class X : nullptr_<int*,double*,char*>//can't do away with the list here, unless you want to typedef it
{

    int* a;
    double* b;
    char* c;
    //typedef nullptr_<decltype(a),decltype(b),decltype(c)> init_; //don't really need this
public:
    X():nullptr_(a,b,c) //can be used without the argument list
    {

    }
};

nullptr_<int*,double*,char*> becomes an injected class name within X, so you can refer to it without the argument list:

class X : nullptr_<int*,double*,char*>//can't do away with the list here, unless you want to typedef it
{

    int* a;
    double* b;
    char* c;
    //typedef nullptr_<decltype(a),decltype(b),decltype(c)> init_; //don't really need this
public:
    X():nullptr_(a,b,c) //can be used without the argument list
    {

    }
};
我纯我任性 2024-12-21 22:45:15

将 typedef 从类中移至匿名命名空间并使用它进行继承怎么样?

How about moving the typedef out of the class in to an anonymous namespace and use that for inheritance?

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