7得票1回答
如何检查模板类型是否为变体类型的其中一种类型?

如果考虑到一种变体类型和一个模板函数,我该如何检查模板类型是否是变体类型中的一种? 是否有比下面更加优雅的方法? typedef boost::variant<Foo,Bar> Var; template <typename T> void f(const T&am...

13得票4回答
前向声明和shared_ptr

我试图重构我的代码,使用前向声明而不是包含大量头文件。我对此很陌生,并且有关于boost::shared_ptr的问题。 假设我有以下接口:#ifndef I_STARTER_H_ #define I_STARTER_H_ #include <boost/shared_ptr.hpp...

7得票2回答
以名称空间作为模板参数的替代方案

我知道无法在模板参数中使用命名空间。但是,我想实现类似于以下行为: template <typename T> void foo(T::X* x) { T::bar(x); } 除了T是一个命名空间而不是一个结构体或类之外,最好的方法是实现最接近我期望的结果是什么?

15得票1回答
C++11之前的"常量表达式"

``` constexpr关键字是在C++11中引入的,同时也引入了对应的“常量表达式”概念。然而,在C++98/c++03中隐含着这个概念,因为数组声明需要一个常量表达式。 ``` // valid: int a[sizeof(int)]; int b[3+7]; int c[13/4];...

20得票4回答
向量和双端队列中删除项目的时间复杂度

我读到过这样的说法,向一个 std::vector 的末尾添加项的时间复杂度是摊销常数,向 std::deque 的顶部和底部插入项的时间复杂度是常数。由于这两个容器都有随机访问迭代器,因此访问任何索引处的元素的时间复杂度都是常数。如果我在上述论述中有任何错误,请告诉我。我的问题是,如果访问 ...

19得票3回答
这个数组大小的宏/函数模板是如何工作的?

我在这篇文章PVS-Studio vs Chromium中发现了这个片段。 template <typename T, size_t N> char (&ArraySizeHelper(T (&array)[N]))[N]; #define arraysi...

198得票5回答
为什么默认模板参数只允许在类模板中使用?

为什么只允许在类模板中使用默认模板参数?为什么不能在成员函数模板中定义默认类型?例如: struct my_class { template<class T = int> void mymember(T* vec) { // ... } }; 相反,C++...

11得票1回答
如何为多个流操作创建别名?

在C++98中是否存在一种方式来创建以下行的简写别名?std::precision(3) << std::fixed 然后按照以下方式使用别名:std::cout << alias << 3.1415926 << std::endl;

7得票2回答
std::copy/memcpy/memmove 优化

我查看了GCC STL(4.6.1)并发现std::copy()在内置__is_trivial()计算结果为true时会使用优化版本。 由于std::copy()和std::reverse_copy()模板非常适用于在数组中复制元素,因此我想使用它们。但是,我有一些类型(这些类型是模板实例化...

12得票4回答
在std::vector<std::pair>中查找

我有一对的向量。第一对是std :: string类型,第二对是Container类型。 在std或boost中存在什么方便的功能,使得我可以根据字符串值作为键返回Container? 更新 已经被评论说我可以使用std::map代替,但实际上我需要保留我项目的顺序,按照我将它们推入向量...