相关疑难解决方法(0)

`void_t`是如何工作的?

我观看了Walter Brown在Cppcon14上关于现代模板编程(第一部分,第二部分)的演讲,他在演讲中展示了他的void_tSFINAE技术.

示例:
给定一个简单的变量模板,该模板计算void所有模板参数是否格式正确:

template< class ... > using void_t = void;
Run Code Online (Sandbox Code Playgroud)

以及检查是否存在名为member的成员变量的以下特征:

template< class , class = void >
struct has_member : std::false_type
{ };

// specialized as has_member< T , void > or discarded (sfinae)
template< class T >
struct has_member< T , void_t< decltype( T::member ) > > : std::true_type
{ };
Run Code Online (Sandbox Code Playgroud)

我试图理解为什么以及如何运作.因此一个小例子:

class A {
public:
    int member;
};

class B {
};

static_assert( has_member< A …
Run Code Online (Sandbox Code Playgroud)

c++ templates sfinae c++14

140
推荐指数
2
解决办法
1万
查看次数

C++:如何将任何可迭代类型作为函数参数传递

作为练习,我正在尝试join()用C++ 实现Python的方法.我最终会将该函数添加为std::string类的方法,但我认为让它工作更为重要.我已经定义了如下函数:

template<typename Iterable>
std::string join(const std::string sep, Iterable iter);
Run Code Online (Sandbox Code Playgroud)

有什么方法可以确保Iterable类型实际上是可迭代的吗?例如,我不想收到intchar..

c++ iterable generic-type-argument

7
推荐指数
2
解决办法
1505
查看次数

标签 统计

c++ ×2

c++14 ×1

generic-type-argument ×1

iterable ×1

sfinae ×1

templates ×1