小编use*_*020的帖子

如何为类中的模板定义类型别名

例如

struct Option_1
{
    template<class T> using Vector = std::vector<T>;
};
Run Code Online (Sandbox Code Playgroud)

我可以

typename Option_1::Vector<int> v;
Run Code Online (Sandbox Code Playgroud)

但我更喜欢下面的

Vector<Option_1, int> v;
Run Code Online (Sandbox Code Playgroud)

或不带“typename”一词的类似名称。我定义了一个别名

template<class Option, class T> using Vector= typename Option::Vector<T>;
Run Code Online (Sandbox Code Playgroud)

但由于无法识别的模板声明/定义而失败。如何修复它?

c++ templates using c++11 type-alias

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

boost :: container :: vector比std :: vector更快吗?为什么?

我对boost矢量和std矢量做了一个有趣的测试,如下所示

int N = 10000;
{
    boost::timer::auto_cpu_timer t;
    std::vector<int> v;
    for (int i = 0; i < N; ++i)
    {
        v.insert(v.begin(), i);
    }
}

{
    boost::timer::auto_cpu_timer t;
    boost::container::vector<int> v;
    for (int i = 0; i < N; ++i)
    {
        v.insert(v.begin(), i);
    }
}
Run Code Online (Sandbox Code Playgroud)

win32发布,由vc2010编译,/ O2/Oy-

对于N = 10000

对于std向量:0.140849s wall,0.140401s user + 0.000000s system = 0.140401s CPU(99.7%)

f boost vector:0.056174s wall,0.062400s user + 0.000000s system = 0.062400s CPU(111.1%)

对于N = 100,000

std:14.050757s wall,14.055690s user + 0.000000s system = 14.055690s CPU(100.0%) …

c++ boost vector std

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

使用Qt在设置中存储码头寡妇布局和大小的任何简单方法?

我有一个带有一些内部可停靠窗户的主窗口.我可以移动,调整大小并重做那些可停靠的窗口.关闭并重新打开程序后,我希望保持移动,大小和重新锁定.有没有简单的方法来实现它?我认为它会使用设置.但是哪些信息应保存在设置中.以及如何设置所有这些停靠窗口的默认布局?单击操作按钮时,可以将其还原.谢谢.

qt docking

4
推荐指数
2
解决办法
2666
查看次数

如何避免忘记在子类中定义operator ==?

我有一个基类,并在其上定义一个运算符==.并且B是的一个子类A,我忘记定义operator==B.然后A::operator==用于比较B,通常这会产生意想不到的结果.有什么好方法可以避免这种"忘记"吗?我添加一个例子来澄清我的问题.

class A
{
public:
    bool operator==(const A& rhs) const
    {
        return i == rhs.i;
    }

    int i
};

class B : public A
{
public:
    int j;
}

B b1, b2;
b1.i = 1; b1.j = 2;
b2.i = 1; b1.j = 3;
bool b = (b1 == b2); // will be true
Run Code Online (Sandbox Code Playgroud)

c++ inheritance

4
推荐指数
2
解决办法
151
查看次数

如何在编译时选择方法?

我记得读过一些使用新C++特性的文章来在编译时实现选择,但无法弄清楚如何去做.例如,我有一个方法执行以下操作

template<class T>
void foo()
{
   if (std::is_abstract<T>::value)
         do something;
   else
         do others.
}
Run Code Online (Sandbox Code Playgroud)

c++ templates

4
推荐指数
2
解决办法
913
查看次数

利用简短且可定义的虚拟方法进行优化?

我只是想知道大多数编译器是否可以进行以下优化

class A
{
    virtual void f() { m = 5; }
    void g() { f(); }
    int m;
};
Run Code Online (Sandbox Code Playgroud)

f()是一个虚函数,因此不是内联的.但是,编译器可以优化g()f()内联调用,因为定义f()很短且可用吗?

c++ optimization

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

无法从'DerivedClass*'转换为'BaseClass*&'

我尝试以下代码,并获得编译错误.

class A {};
class B : public A {};

void f(A*& p) {}

int
main()
{
    B* pB;
    f(pB); // cannot convert argument 1 from 'B *' to 'A *&'

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

如何解决f(pB)调用f(A*&p)函数?

c++ polymorphism reference pass-by-reference upcasting

4
推荐指数
2
解决办法
3125
查看次数

如何通过地址获取元组中元素的索引?

例如:

std::tuple<int, double> t;
void* p = &std::get<1>(t);
Run Code Online (Sandbox Code Playgroud)

现在我想通过某些函数得到p的索引

template<typename... Ts>
size_t index(void* p, std::tuple<Ts...> const& t)
{
   ...
}
Run Code Online (Sandbox Code Playgroud)

当然这个例子的结果是1.我感兴趣的是当p是通过显式索引以外的方式获得时,如何实现函数来获取索引.

c++ tuples c++11

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

有什么方法可以制作包含多个元素的 C# 列表吗?

有没有办法一次性创建一个包含给定数量元素的 C# 列表?不只是一一相加,或者从其他IEnumerable复制过来。然后我可以使用索引器来分配值。我找到了一个构造函数List(int capacity)。有帮助吗?

c# list

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

如何使数组的派生类型接受聚合初始化?

例如

class A : public std::array<int, 3>
{
};
Run Code Online (Sandbox Code Playgroud)

A a{1, 2, 3}; // failed currently.
Run Code Online (Sandbox Code Playgroud)

如何使数组的派生类型接受聚合初始化?

c++ initialization c++11 stdarray

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