小编use*_*108的帖子

从星期开始以来的秒数?

我一直在尝试霍华德的约会库.有很多例子可以获取自某一天午夜以来的秒数,但不是自该日所属的星期开始以来的秒数.按照示例我生成了这段代码:

using timepoint_t = std::chrono::time_point<
  std::chrono::system_clock,
  std::chrono::nanoseconds
>;

timepoint_t tp; // input
auto dp = std::chrono::floor<date::weeks>(tp); // output, should point to start of week?
Run Code Online (Sandbox Code Playgroud)

但结果是错误的.例如,tp:

2018-10-25T11:26:00.397836134Z
Run Code Online (Sandbox Code Playgroud)

会产生dp:

2018-10-25T00:00:00.000000000Z 
Run Code Online (Sandbox Code Playgroud)

这是25日午夜,而不是21日午夜.产生正确输出的最直接方法是什么?

c++ date

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

条件(SFINAE)覆盖

我正在尝试这样做:

struct A
{
  virtual int f() const { return 0; }
};

template <typename T>
struct B : A
{
  template <typename U = T,
    typename std::enable_if<...some condition involving U...>::type>
  int f() const { return 1; }
};
Run Code Online (Sandbox Code Playgroud)

警告,我不能继承类模板(使用静态覆盖).是否允许这种构造,模板成员B :: f()是否可以覆盖成员A :: f()?

c++ templates sfinae c++11

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

std :: unordered_map的函数指针

有像这样的网站:

http://www.cplusplus.com/reference/unordered_map/unordered_map/

这就是说,一个可以提供一个函数指针,而不是一类,对于HashPred该参数的std::unordered_map类模板.但是,没有示例,如果可能的话,我还没有设法让这个功能起作用.非工作的例子:

bool unordered_eq(const char* const s1, const char* const s2)
{
  return !std::strcmp(s1, s2);
}

std::size_t unordered_hash(char const* s)
{
  return std::hash<std::string>()(s);
}

std::unordered_map<char const*, std::string,
  unordered_hash, unordered_eq> hashmap;
Run Code Online (Sandbox Code Playgroud)

c++ std c++11

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

捕获所有内容与仅捕获lambda中的某些内容

我偶尔会想出这样的代码:

// lazy lambda:
[&] {
// use references to a, b, c
}

// pedantic lambda
[&a, &b, &c] {
// use references to a, b, c
}
Run Code Online (Sandbox Code Playgroud)

我想知道根据C++ 14标准(或更高版本)和编译器的实际经验,哪些lambda在性能和可执行大小方面更好.

c++ lambda c++14

8
推荐指数
2
解决办法
173
查看次数

具有不完整类型的图/树实现

之前已经多次讨论过这个问题.如果需要,该怎么办:

struct Node
{
  ::std::vector<Node> nodes_;
};
Run Code Online (Sandbox Code Playgroud)

这里可以得到一个印象,即(智能)指针Node*可能是规范的解决方案.这意味着一些额外的间接性和相应的性能损失.从这里,我们看到,它libstdc++支持::std::vector<T>实例化,其中T是一个不完整的类型,但不是libc++.这很难携带.但是一个解决方案可能是::std::vector支持不完整类型的便携式外观容器.最后,我们可以做到:

template <::std::size_t I = 0>
struct Node
{
  ::std::vector<Node<I + 1> > nodes_;
};

template <>
struct Node<20>
{
};
Run Code Online (Sandbox Code Playgroud)

这对我们的图/树施加了限制.是否存在其他解决方法,因为a Node包含Nodes,但在声明时是不完整的类型 ::std::vector<Node> nodes_;

c++ stl c++11

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

通过值或引用传递lambda会更容易内联吗?

之前已经提出过类似的问题,但我仍然感到困惑.我相信STL只是通过值传递,因为通过引用传递可能会在多线程环境中产生影响.比如说,当两个或多个线程正在执行一个可变的lambda时.当我只想调用lambda时,我目前使用通用引用:

template <typename F>
inline void invoke(F&& f)
{
  f();
}
Run Code Online (Sandbox Code Playgroud)

这会绑定到任何函数对象,就像一个const&愿望,但也许这对于内联来说是一个坏主意.复制传递的lambda更容易由编译器内联吗?我希望通过的lambdas尽可能"无法忍受".

c++ lambda c++14

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

主线程和线程池

标准的习惯用法似乎是创建n = std::thread::hardware_concurrency()线程并将它们放入线程池中。但是主线程与其他线程一样,因此我们可能只创建n - 1线程并将主线程视为线程池的一部分并节省一些资源。有什么理由不应该这样做吗?

c++ multithreading threadpool

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

可以默认默认构造函数抛出?

默认的构造函数由C++编译器生成,用户无法控制它们.他们可以扔吗?是否可以指定noexcept何时声明?

以下代码编译得很好gcc.

struct A
{
  A() = default;
};

struct B
{
  B() noexcept = default;
};

int main()
{
  A a;
  B b;

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ c++11

6
推荐指数
2
解决办法
359
查看次数

无法创建字符串文字类型

我想创建一个我可以用作模板参数的字符串文字.它将编译器抛入某种无限循环.有什么问题并修复?

template <char...> struct slit { };

template <typename ...A>
constexpr auto make_slit(char const* const s, A const ...args)
{
  return *s ? make_slit(s + 1, *s, args...) : slit<args...>();
}

int main()
{
  auto const tmp_(make_slit("slit"));

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

强制性错误(带clang++ -std=c++1y):

t.cpp:4:16: fatal error: recursive template instantiation exceeded maximum depth of 256
constexpr auto make_slit(char const* const s, A const ...args)
               ^
t.cpp:6:15: note: in instantiation of function template specialization 'make_slit<char, char, char, char, char, char, char, …
Run Code Online (Sandbox Code Playgroud)

c++ constexpr c++14

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

为什么在boost或Standard中没有"变体"?

的一个优点anyvariant就是,一个不需要指定所有类型,它可能含有.我注意到,随着a类型的数量variant增加,人们倾向于any在某个时候切换,因为他们根本不再跟踪所有类型.我想之间的混合any,并variant有可能.一个可以存储" placeholder"(通过放置new)的anyaligned_storage,与在所计算的大小constexpr被存储,其可以最终功能或模板元函数,从最大的类型的样本,.另一方面,用户不需要指定any可能包含的所有类型.该any还可以扔在任何时候,如果用户将尝试存储的东西比大aligned_storage在那里.

这样的" variant_any"类是否存在?这个想法有一些固有的问题吗?

c++ c++11

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

标签 统计

c++ ×10

c++11 ×5

c++14 ×3

lambda ×2

constexpr ×1

date ×1

multithreading ×1

sfinae ×1

std ×1

stl ×1

templates ×1

threadpool ×1