我想使用Qt的反射机制,因为C++缺乏这个功能.它似乎工作,但调用所有的宏和辅助函数是非常繁琐的.例如,要将枚举注册为正确的元类型,我必须完成以下所有步骤:
Q_GADGET宏的包装类中声明一个枚举.Q_ENUM之后使用宏注册枚举.Q_DECLARE_METATYPE(MyClass) qRegisterMetaType<..>()包装类的类型和每个声明的枚举.现在我知道如果不需要部分完整功能,可以省略某些步骤.但这不是我想要的,我需要在信号中使用枚举,我需要能够获得信号的元方法并查询它的参数类型.
但我仍然不禁想到必须有更好/更简单的方法来做到这一点.
这可能吗?例如,如果我写
Car myCar;
Run Code Online (Sandbox Code Playgroud)
然后调用不带Car参数的构造函数.如果只有构造函数接受参数,则会导致错误.
在Java中,我可以使用与上面完全相同的语句轻松声明一个对象并在以后创建它.
我了解到std :: vector是C++中原始数组的一个很好的包装器,所以我开始用它来管理我的CUDA应用程序中的主机数据[1].由于必须手动分配和复制东西会使代码更复杂,更不易读,我想扩展std :: vector.由于我不是很有经验,所以我想知道你对它的看法.特别是天气正确完成(例如std :: vector的析构函数是隐式调用的,对吧?)如果你认为它是个好主意.
我写了一个小例子来说明这一点
#include <vector>
#include <cuda.h>
#include <cstdio>
void checkCUDAError(const char *msg)
{
cudaError_t err = cudaGetLastError();
if( cudaSuccess != err) {
fprintf(stderr, "Cuda error: %s: %s.\n", msg, cudaGetErrorString(err));
exit(EXIT_FAILURE);
}
}
// Wrapper around CUDA memory
template<class T>
class UniversalVector: public std::vector<T>
{
T* devicePtr_;
bool allocated;
public:
// Constructor
UniversalVector(unsigned int length)
:std::vector<T>(length),
allocated(false)
{}
// Destructor
~UniversalVector()
{
if(allocated)
cudaFree(devicePtr_);
}
cudaError_t allocateDevice()
{
if(allocated) free(devicePtr_);
cudaError_t err =
cudaMalloc((void**)&devicePtr_, sizeof(T) …Run Code Online (Sandbox Code Playgroud) 我有一个带有ActiveRecord对象的JSON数组.可以使用每个AR对象具有的from_json方法重建这些对象.但是使用from_json,只能重建一个单个对象.
为了处理数组,我当然可以从JSON数组中提取子字符串,并在循环中从它自己的子字符串中创建每个对象.但是我想知道是否有更好的方法来执行此操作,而不涉及字符串操作.
以下程序不断崩溃,我无法弄清楚是什么问题.似乎v在某个主要功能中不可用..
#include <iostream>
#include <vector>
using namespace std;
vector<string> *asdf()
{
vector<string> *v = new vector<string>();
v->push_back("blah");
v->push_back("asdf");
return v;
}
int main()
{
vector<string> *v = NULL;
v = asdf();
for (int i=0; i<(v->size()); v++) {
cout << (*v)[i] << endl;
}
delete v;
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我试图在Java中编写一些简单的数字代码,以后可以在float和double之间进行选择.我的类的简化版本如下所示:
public class UniformGrid<T> {
public T[] data;
public UniformGrid(int arrayDim) {
data = new T[arrayDim];
}
}
Run Code Online (Sandbox Code Playgroud)
这不起作用我generic array creation在尝试编译时遇到错误.谷歌搜索和阅读我学到的java.lang.reflect.Array并尝试使用的一些SO答案
data = (T[]) Array.newInstance(T.class, arrayDim);
Run Code Online (Sandbox Code Playgroud)
这也没有用,因为T(可能)是一种原始类型.我的Java知识非常生疏(特别是涉及泛型时),我想知道为什么new运算符不能与泛型数组类型一起使用.当然,我也对如何用Java解决这个问题感兴趣.
c++ ×4
activerecord ×1
constructor ×1
cuda ×1
enums ×1
generics ×1
java ×1
qmetaobject ×1
qmetatype ×1
qt ×1
reflection ×1
stl ×1