C++是否有现有的方法来检查对象是否是派生类型的对象?例如,
class A
{};
class B : public A
{};
A* p;
Run Code Online (Sandbox Code Playgroud)
并检查是否p指向B.
例如
void assign(vector<int> const& v, int a, float b)
{
a = v[0];
b = (float)v[1];
}
Run Code Online (Sandbox Code Playgroud)
这里的值类型不需要相同.我想创建一个函数来分配可变数量的变量.我可以使用variadic函数.但我认为使用参数包可能更有效.怎么实现呢?谢谢!
我用它vector<unique_ptr<Data>>来存储我的数据,用于自动内存管理和低成本unique_ptr.我有一个函数来尝试将新创建的数据添加到其中.可以真实地添加或不添加数据.它被添加,我不需要关心它的内存删除,因为指针向量将处理它.如果没有添加,我希望可以自动删除新创建的数据.有没有简单的方法来实现它?该功能可能如下所示或其他类似形式.谢谢.
// Return true if really added, return flase if not.
bool add(vector<unique_ptr<Data>>& vec, Data* newData);
Run Code Online (Sandbox Code Playgroud)
根据Dave的回答,bool add(vector<unique_ptr<Data>>& vec, std::unique_ptr<Data>& newData)自unique_ptr非公共可复制以来更好吗?这里引用用于第二个参数.
在·std :: unique_ptr·文件"memory"中的代码中,我将操作符重载函数视为
typename tr1::add_reference<_Ty>::type operator*() const
{
// return reference to object
return (*this->_Myptr);
}
pointer operator->() const
{
// return pointer to class object
return (&**this);
}
Run Code Online (Sandbox Code Playgroud)
&**第二个函数的意思是什么?谢谢.
例如,我有一个菜单并在其中的某处添加一个操作。一段时间后,我想用新的操作替换该操作,因为它变得无效。如何实施?
QMenu* menu = new QMenu(this);
...
QAction* action = menu->addAction("text");
...
QAction* newAction = new QAction(menu);
// how to replace?
Run Code Online (Sandbox Code Playgroud) 我有两种算法来完成相同的任务。要检查它们的性能,我应该检查什么:cpu time 或 wall time?我认为是 CPU 时间,对吧?
我正在对我的代码进行并行处理。要检查我的并行性能,我应该检查什么:cpu time 或 wall time?我认为是墙壁时间,对吧?
假设我已经使用多线程完成了理想的并行性。我认为 1 个线程的 cpu 时间将与 8 个线程相同,而 1 个线程的壁挂时间将比 8 个线程长 8 倍。这样对吗?
还有任何简单的方法来检查这些时间吗?
例如
struct A { typedef int Type; }
struct B { typedef float Type; }
template<class... Ts>
struct C
{
typedef tuple<Ts::Type...> TupleType; // comilation error: parameter pack
// expects a type template argument
};
Run Code Online (Sandbox Code Playgroud)
如何解压缩类型定义的类型?
例如,我有一系列函数f1,f2等,具有相同的两个参数类型.我想用宏
RUN((f1)(f2)(f3), a, b)
Run Code Online (Sandbox Code Playgroud)
用结果运行函数序列
f1(a, b), f2(a, b), f3(a, b)
Run Code Online (Sandbox Code Playgroud)
我认为升压预处理器可以提供帮助.我试过了
#define RUN_DETAIL(pR, pData, pF) pF(a, b);
#define RUN(pFs, a, b) BOOST_PP_SEQ_FOR_EACH(RUN_DETAIL, BOOST_PP_EMPTY, pFs)
Run Code Online (Sandbox Code Playgroud)
但失败了.怎么做?
找到答案如下
#define RUN_DETAIL(pR, pData, pF) pF pData;
#define RUN(pFs, ...) BOOST_PP_SEQ_FOR_EACH(RUN_DETAIL, (__VA_ARGS__), pFs)
Run Code Online (Sandbox Code Playgroud)
此技术也适用于调用宏序列.
我打算在https://github.com/nlohmann/json#examples上使用json c ++ .阅读完简单的例子之后,我仍然不知道如何将它与我自己的对象一起使用?例如,我有一个班级
class Student
{
public:
Student(int id, string const& name)
: m_id(id), m_name(name)
{}
private:
int m_id;
string m_name;
};
Run Code Online (Sandbox Code Playgroud)
如何使用json读取和写入(反序列化和序列化)Student对象?
如果在调用它的作用域中找不到函数,则会查找其参数的名称空间.我有几个问题.
如果在不同的命名空间中有多个参数,首先会查找哪个命名空间?它是第一个参数的命名空间吗?
f(A::T t, B:U u); // Is namespace A looked up first?
Run Code Online (Sandbox Code Playgroud)模板类更复杂,比如
f(A::T<B::U> t); // Namespace A or B is looked up first?
Run Code Online (Sandbox Code Playgroud)c++ ×10
c++11 ×2
boost ×1
dynamic-cast ×1
json ×1
menu ×1
namespaces ×1
performance ×1
profiling ×1
qt ×1
templates ×1
unique-ptr ×1