typetraits 相关问题

类型特征是语法扩展,允许开发人员在编译时确定类型的各种特征。 C ++支持由编译器支持和一组库模板的组合提供。通过标题<type_traits>提供对类型特征的访问

仅在函数支持传递适当的可变参数时编译

#include #include 类A {公开:void run(int value){std :: cout << value << std :: endl; }; B类{public:void run(int value1,...

回答 1 投票 0

如何在编译时获取指向非静态数据成员的指针的对象类型?

假设我们有一个像这样的简单数据类:struct DataObj {char member [32];以及指向数据对象中成员的指针的类型:typedef decltype(&DataObj :: member)memberObjPtr; ...

回答 2 投票 1

如果特定的C ++类型具有成员,则排除继承的成员

我想检测特定类型是否具有成员:直接而不是继承的结果。目的是确定特定类型是否“具有特征”,例如序列化的能力。 ...

回答 3 投票 3

将元组类型扩展为可变参数模板吗?

我有一个函数main_func,通过将其转换为元组来修改参数包/变量模板。修改完之后,例如:original = tuple 修改为= ...

回答 2 投票 0

如何实现std :: is_nothrow_constructible

所以最近,我在看了一些cppcon演讲后正在尝试一些模板元编程,并且我试图重新实现类型特征中的某些特征,但是我必须去std :: ...

回答 1 投票 1

给出一个类型,如何派生泛型类型(例如,用于溢出安全求和)?

仅出于示例目的,假设我有一个计算给定std :: vector :template T vec_average(const std :: vector &... 的平均值的函数

回答 2 投票 3

std :: enable_if用于cpp中定义的模板方法

我在一个模板化类上工作,其方法定义在cpp文件中。现在,我想添加另一个仅对某些类模板参数启用的方法。我目前的做法:....

回答 1 投票 0

具有特定参数的函子的概念或特征?

我正在尝试创建一个可用于安全检查特定条件的概念。这是我现在的代码:template void fetch(T && f){fetch_helper(&f,&...

回答 1 投票 1

为嵌套模板编写C ++ 17样式“ _v”帮助模板的正确方法

标准库提供了用于在编译时确定不同类型特征的模板。例如:std :: is_integral :: value将告诉您某物是否为整数类型。 ...

回答 1 投票 0

嵌套名称说明符中使用std enable_if使用的不完整类型

我有一段代码(这是从较大的项目中复制出来的最小代码)。 #include template struct poly_gcd_reduce_helper; ...

回答 2 投票 2

std :: is_same_v使用非专业模板

我有以下代码:#include #include 使用命名空间std; template class A {public:static constexpr int n = N; }; ...

回答 1 投票 -1

我如何创建特征来给我两种中较大的一种? [重复]

我需要检查一种类型是否大于另一种类型,然后有条件地使用一种类型或另一种类型。以字节为单位。像这样的东西(伪代码):template ... ... >>>>

回答 1 投票 0

在模板参数包上使用类型特征?

在下面的示例代码中,我正在尝试使用std :: is_pointer检查函数参数是否为指针,如果只有一个参数,它可以正常工作,但是如何使其与更多参数一起工作,...

回答 2 投票 1

如何检查类是否具有运算符[]?

[我正在尝试检查运算符[]在某些类中是否过载。有我的代码:template struct has_operator:std :: false_type {};模板 结构...

回答 2 投票 2

为什么在gcc的is_nothrow_constructible实现中需要static_cast?

来自type_traits的GCC实现,为什么在这里需要static_cast?模板 结构__is_nt_constructible_impl:公共积分常量

回答 1 投票 11

std :: remove_reference_t >顺序重要吗?

以下列顺序应用是否重要? std :: remove_reference_t >或std :: remove_cv_t >在什么情况下,如果...

回答 1 投票 1

我们能否在C ++ 17中检测到“平凡的可重定位性”?

在将来的C ++标准中,我们将具有“平凡的可重定位性”的概念,这意味着我们可以简单地将字节从一个对象复制到未初始化的内存块中,而只需忽略/归零...

回答 1 投票 1

invoke_result以获取模板成员函数的返回类型

如何获取模板成员函数的结果类型?下面的最小示例说明了该问题。 #include template struct A {}; struct ...

回答 1 投票 5

如何构造一个类型特征,该特征可以告诉一个类型的私有方法是否可以在另一个类型的构造函数中调用?

我正在使用C ++ 17。我有类似以下代码:#include template struct Fooer {Fooer(T&fooable){fooable。 foo(); }}; ...

回答 1 投票 2

std :: is_invocable语法,用于测试是否存在任意方法(不仅是operator())

在C ++ 17中,我知道我可以写:#include struct A {size_t operator()(double x)const {return 1; }; }; int main(){static_assert(std :: is_invocable_r_v ] >>> ] >>> 使用detection idiom: template <typename T, typename... Args> using call_size_t = decltype(std::declval<T>().size(std::declval<Args>()...); template <typename R, typename T, typename... Args> using is_size_callable = is_detected_convertible<R, call_size_t, T, Args...>; static_assert(is_size_callable<size_t, A, double>::value); 这具有使用重载的成员函数size,模板或采用默认参数的好处。 在具有概念的C ++ 20中: template <typename T, typename R, typename... Args> concept is_size_callable = requires (T t, Args... args) { { t.size(std::forward<Args>(args)...) } -> std::convertible_to<R>; }; static_assert(is_size_callable<A, size_t, double>); 我将参数放在T的前面,因为这将允许type-constraint 语法: template <is_size_callable<size_t, double> T> void foo(T ); foo(A{}); 我刚刚意识到正确的语法是: static_assert(std::is_invocable_r_v<size_t, decltype(&A::size), A, double>); 这是一个可行的示例 // -*- compile-command: "g++ -std=c++17 demo.cpp -o demo"; -*- #include <type_traits> struct A { size_t operator()(double x) const { return 1; }; size_t size(double x) const { return 1; }; }; int main() { static_assert(std::is_invocable_r_v<size_t, A, double>); static_assert(std::is_invocable_r_v<size_t, decltype(&A::size), A, double>); return EXIT_SUCCESS; }

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.