例如
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)
但由于无法识别的模板声明/定义而失败。如何修复它?
我对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%) …
我有一个带有一些内部可停靠窗户的主窗口.我可以移动,调整大小并重做那些可停靠的窗口.关闭并重新打开程序后,我希望保持移动,大小和重新锁定.有没有简单的方法来实现它?我认为它会使用设置.但是哪些信息应保存在设置中.以及如何设置所有这些停靠窗口的默认布局?单击操作按钮时,可以将其还原.谢谢.
我有一个基类,并在其上定义一个运算符==.并且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++特性的文章来在编译时实现选择,但无法弄清楚如何去做.例如,我有一个方法执行以下操作
template<class T>
void foo()
{
if (std::is_abstract<T>::value)
do something;
else
do others.
}
Run Code Online (Sandbox Code Playgroud) 我只是想知道大多数编译器是否可以进行以下优化
class A
{
virtual void f() { m = 5; }
void g() { f(); }
int m;
};
Run Code Online (Sandbox Code Playgroud)
f()是一个虚函数,因此不是内联的.但是,编译器可以优化g()为f()内联调用,因为定义f()很短且可用吗?
我尝试以下代码,并获得编译错误.
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)函数?
例如:
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# 列表?不只是一一相加,或者从其他IEnumerable复制过来。然后我可以使用索引器来分配值。我找到了一个构造函数List(int capacity)。有帮助吗?
例如
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++ ×8
c++11 ×3
templates ×2
boost ×1
c# ×1
docking ×1
inheritance ×1
list ×1
optimization ×1
polymorphism ×1
qt ×1
reference ×1
std ×1
stdarray ×1
tuples ×1
type-alias ×1
upcasting ×1
using ×1
vector ×1