相关疑难解决方法(0)

C++ 14变量模板:它们的目的是什么?任何用法示例?

C++ 14将允许创建模板化的变量.通常的例子是变量'pi',可以读取它以获得各种类型的数学常数π的值(3表示int;可能的最接近的值float等)

除此之外,我们可以通过将变量包装在模板化的结构或类中来实现此功能,这与类型转换如何混合?我看到一些重叠.

除了pi示例之外,它如何与非const变量一起使用?任何用法示例,以了解如何充分利用此类功能及其目的是什么?

c++ templates rationale c++14

52
推荐指数
5
解决办法
3万
查看次数

我可以使用变量模板来声明另一个变量模板吗?

随着C++ 14中的变量模板(以及Clang已经支持它们)和标准is_same_v类型特征的提议,我认为能够制作新的类型特征如下:

template<typename T>
constexpr bool is_const_and_volatile{std::is_const_v<T> && std::is_volatile_v<T>};
Run Code Online (Sandbox Code Playgroud)

唉,这会导致错误等同于以下SSCCE(这个包含下面提到的所有内容):

#include <type_traits>

template<typename T>
constexpr bool is_pointer{std::is_pointer<T>::value};

template<typename T>
constexpr bool foo{is_pointer<T>};

int main() {
    //foo<int *>;
}
Run Code Online (Sandbox Code Playgroud)

main评论中,Clang吐出以下内容:

警告:变量is_pointer<type-parameter-0-0>具有内部链接但未定义

它看起来定义为我的(注意,更改Tint *foo正常工作).在取消注释行main实例foo给出了这样的(再次,Tint *优良工程):

错误:constexpr变量foo<int *>必须由常量表达式初始化

但是,foo使用以下旧语法替换会导致两个实例都正常工作:

constexpr bool foo{std::is_pointer<T>::value};
Run Code Online (Sandbox Code Playgroud)

关于变量模板有什么我想念的吗?有没有办法它们构建新的变量模板,或者我是否被迫使用旧的语法来构建新的模板,并且在将它们用于其他代码时只享受语法糖?

c++ variable-templates c++14

8
推荐指数
1
解决办法
398
查看次数

标签 统计

c++ ×2

c++14 ×2

rationale ×1

templates ×1

variable-templates ×1