当前位置:  开发笔记 > 编程语言 > 正文

从非类型模板参数确定类型

如何解决《从非类型模板参数确定类型》经验,为你挑选了1个好方法。

我希望我能做到这一点:

template 
struct Test {
    T val{x};
};

int main() {
    Test<3> test;
    return test.val;
}

但我不能.对?


我在这里回答了一个问题,我使用以下模板:

template 

每种类型都是手动指定的.但这是一个重复因为T,V并且VP已经包含在指向成员函数getfsetf类型的指针中.


但是,如果我只尝试模板

template 

要么

template 

那么类型无法确定.


接下来我尝试了专业化:

template 
struct Accessor;

template 
struct Accessor 

如果使用,将确定所有类型

typedef Accessor<
    decltype(&TargetClass::GetFoo), 
    decltype(&TargetClass::SetFoo)> fooAcessor;

但现在我不再有指针,只有类型.


有没有办法编写模板,以便可以从非类型模板参数自动确定类型?



1> Barry..:

有没有办法编写模板,以便可以从非类型模板参数自动确定类型?

在C++ 17中,是的,感谢声明非类型模板参数auto:

template 
struct Test {
    decltype(x) val{x};
};

在C++ 17之前,没有.你必须写:

template 
struct Test {
    T val{x};
};


@Muscampester他是巴里,神奇的C++约克郡!:d
@Quentin Ahem,[Westie](https://en.wikipedia.org/wiki/West_Highland_White_Terrier)!
推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有