例如
struct A
{
void foo() {};
};
struct B
{
B() {}
void setA(A* a) { mA = a; }
foo() { mA->foo(); }
A *mA;
};
Run Code Online (Sandbox Code Playgroud)
内部有一个A关联的(只是一个地址)B.而且B::mA一定不能null.我经常忘记setA并且引入了错误.有什么好的做法可以避免它?setA以下怎么样?
void B::setA(A& a) { mA = &a; }
Run Code Online (Sandbox Code Playgroud) 例如,我有两个类A和B.B源于A.
class A {};
class B : public A {};
Run Code Online (Sandbox Code Playgroud)
我有一个唯一指针的向量,A我可以推回一个指向向量的唯一指针.
vector<unique_ptr<A>> vA;
unique_ptr<A> a(new A);
vA.push_back(std::move(a));
Run Code Online (Sandbox Code Playgroud)
(1)如何推回一个独特的指针B?
vector<unique_ptr<A>> vA;
unique_ptr<B> b(new B);
vA.push_back(std::move(b)); //?
Run Code Online (Sandbox Code Playgroud)
(2)如果向量是for B,如何推回一个唯一的指针A(假设它是向下的)
vector<unique_ptr<B>> vB;
unique_ptr<A> a(new B);
vB.push_back(std::move(a)); //?
Run Code Online (Sandbox Code Playgroud) 不知道多核并行化。但是对于简单的循环,它可能几乎没有修改。对于以下示例,如何在 VC++ 中使用多核计算进行简单循环?
#include <iostream>
#include <vector>
#include <ctime>
using namespace std;
void foo(int n, double* a, double* b, double *c, double*d, double* e, double* f, double* g)
{
for (int i = 0; i < n; ++i)
{
a[i] = b[i] * a[i] + c[i] * (d[i] + e[i] + f[i] + g[i]);
}
}
int main()
{
int m = 1001001;
vector<double> a(m), b(m), c(m), d(m), f(m);
std::clock_t startcputime = std::clock();
for (int i = 0; i < …Run Code Online (Sandbox Code Playgroud) 我有全局函数,它们与成员方法具有相同的名称.两者都将在同一范围内使用.我如何区分它们?在全局函数中添加前缀'g'吗?我知道它对于全局变量是常规的,但对全局函数不确定.
在下面的示例中,编译器生成错误"使用未分配的局部变量r",即使我在使用它之前在循环中分配变量.为什么编译器会生成此错误?
static void Main(string[] args)
{
float r;
for (int i = 0; i < 100; i++)
r = i; // assigned here
Console.WriteLine(r); // error: use of unassigned local variable
}
Run Code Online (Sandbox Code Playgroud) 例如,我有几个现有的2D(二维)和3D情况的点类,比如class Point2D和class Point3D.我希望它是模板像template<int D> class Point这里Point<2>相当于或直接使用Point2D与Point<3>等同于或直接使用Point3D.我不想重新实现那些现有的类,因为我的真正的类不像类点那么简单,它是第三方代码,比如
using Point<2> = Point2D;
using Point<3> = Point3D;
Run Code Online (Sandbox Code Playgroud)
有办法吗?
例如,我有一个包含许多方法的基类
class A
{
public:
void f1();
int f2() const;
float f3(double a, char b) const;
...
};
Run Code Online (Sandbox Code Playgroud)
而B类是私下派生自A.我希望A的一些方法是公开的,怎么做呢?
class B : private A
{
public:
using A::f1;
using A::f2;
template<class... Args>
RETURN f3(Args&&... args) CONSTNESS { return A::f3(args...); }
// how to specify return and constness automatically
...
};
Run Code Online (Sandbox Code Playgroud)
我尝试以上方式,他们不工作.模板方式需要自动指定return和constness.
问我错误的问题,在我的实际案例中,A是一个模板类
template<class T>
class A
{
public:
void f1();
int f2() const;
float f3(double a, char b) const;
...
};
Run Code Online (Sandbox Code Playgroud)
B来自A
template<class T>
class B : public A
{ …Run Code Online (Sandbox Code Playgroud) 我有一个矢量.我想将它与聚合物进行比较,看看它们是否相等.例如
vector<int> v{0, 1, 2};
bool b = equal(v, {0, 1, 2}); // how to write a method to implement it???
Run Code Online (Sandbox Code Playgroud) c++ ×7
c++11 ×2
templates ×2
c# ×1
inheritance ×1
multicore ×1
pointers ×1
unique-ptr ×1
vector ×1
visual-c++ ×1