相关疑难解决方法(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++ 11中的填充构造函数和范围构造函数?

我怀疑std::vector在这个网页中给出的填充构造函数和范围构造函数(以及许多其他STL类型)的原型是不对的,所以我实现了一个NaiveVector模仿这两个原型.

我的代码是:

#include <iostream>
#include <vector>
using namespace std;

template <typename T>
struct NaiveVector {
  vector<T> v;
  NaiveVector(size_t num, const T &val) : v(num, val) { // fill
    cout << "(int num, const T &val)" << endl;
  }

  template <typename InputIterator>
  NaiveVector(InputIterator first, InputIterator last) : v(first, last) { // range
    cout << "(InputIterator first, InputIterator last)" << endl;
  }

  size_t size() const { return v.size(); }
};

int main() {
  NaiveVector<int> myVec1(5,1);                   // …
Run Code Online (Sandbox Code Playgroud)

c++ constructor overloading c++11

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

标签 统计

c++ ×2

c++11 ×1

c++14 ×1

constructor ×1

overloading ×1

sfinae ×1

templates ×1