代码如下
// A has a virtual function F().
class A
{
public:
virtual void F() {};
};
// The same for B.
class B
{
public:
virtual void F() {};
};
// C inherits A and B.
class C : public A, public B
{
public:
// How to implement the 2 virtual functions with the same name but from
// different base classes.
virtual F() {...}
};
Run Code Online (Sandbox Code Playgroud)
请注意,基类中有一个F()的默认实现.
感谢Jan Herrmann和Spook.如果我们必须使用一些额外的帮助,下面是一个更简单的解决方案吗?
#include <iostream>
// A has a virtual function F(). …Run Code Online (Sandbox Code Playgroud) 例如
struct A
{
static vector<int> s;
};
vector<int> A::s = {1, 2, 3};
Run Code Online (Sandbox Code Playgroud)
但是,我的编译器不支持初始化列表.有什么办法可以轻松实现吗?lambda函数在这里有用吗?
我有一个指针类型Ptr.它可能是T*,unique_ptr,shared_ptr或其他.如何在编译时获取其尖头类型?我尝试以下但失败了
template<class Ptr>
void f()
{
typedef decltype(*Ptr()) T; // give unexpected results
}
Run Code Online (Sandbox Code Playgroud)
以下删除的答案非常有效.
typedef typename std::remove_reference<decltype(*std::declval<Ptr>())>::type T;
Run Code Online (Sandbox Code Playgroud) 例如,我有一个不可变类型
class Contact
{
// Read-only properties.
public string Name { get; }
public string Address { get; }
}
Run Code Online (Sandbox Code Playgroud)
我希望我可以使用对象初始化程序语法来创建联系人
Contact a = new Contact { Name = "John", Address = "23 Tennis RD" };
Run Code Online (Sandbox Code Playgroud)
但是我不能.在这种情况下,有任何可能的方法来使用强大的对象初始化器语法吗?
探索更多并找到答案以确定如何传递旧帖子(抱歉重复)
[原帖在下面]
我想总结一下按值传递、const 值、引用、const 引用、指针、const 指针的使用,请纠正我并给我您的建议。
还有一些问题:
根据juanchopanza 提到的“Want Speed? Pass by Value”一文,我再添加一项。
非常感谢!
例如,我有一个班级
struct A {int a; bool b;};
Run Code Online (Sandbox Code Playgroud)
我想生成一个模板函数来获取它的元素(比如std :: get获取一个元组元素)
template<unsigned i, class T>
auto Get(T& t);
template<>
int& Get<0, A>(A& a)
{
return a.a;
}
template<>
bool& Get<1, A>(A& a)
{
return a.b;
}
int main()
{
A a;
Get<0>(a) = 10;
Get<1>(a) = true;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码不起作用.挑战在于我不知道Get for any class的返回类型.有没有办法实现呢?谢谢.
例如,我有一个班级
struct A
{
A(int i, double d) {...}
private:
int m_i;
double m_d;
};
Run Code Online (Sandbox Code Playgroud)
和带参数A的函数
void f(A a);
Run Code Online (Sandbox Code Playgroud)
我可以使用初始化列表来调用该函数
f( A{1, 3.14} );
Run Code Online (Sandbox Code Playgroud)
如何制作以下简单版本也有效?
f( {1, 3.14} );
Run Code Online (Sandbox Code Playgroud) 例如
template<class T, class U>
void f();
template<class T> using g = f<T, int>;
Run Code Online (Sandbox Code Playgroud)
或任何类似的功能的想法?
例如
struct A
{
vector<unique_ptr<int>> m_vector { make_unique<int>(1), make_unique<int>(2) };
};
Run Code Online (Sandbox Code Playgroud)
我尝试上面但失败了.有什么方法可以初始化unique_ptr的向量?
如何使用boost :: preprocessor解压缩一对对?
例如,我有一个如下序列(逗号之间无关紧要)
(int,x)(double,y)(float,z) or
(int,x),(double,y),(float,z) or
((int)(x))((double)(y))((float)(z))
Run Code Online (Sandbox Code Playgroud)
并希望转换为
int,double,float
Run Code Online (Sandbox Code Playgroud)
和
x,y,z
Run Code Online (Sandbox Code Playgroud)
通过使用macor之类的
UNZIP(i, seq)
Run Code Online (Sandbox Code Playgroud)
i索引在哪里