我最近使用JSON来存储同一类的一定数量的子类的配置参数.为了保持统一的界面,我为父类提供了public void setParameter(String, String)和String getParameter(String)方法.然后,每个子类将提供的参数转换为其本机类型,并使用它们进行某种计算.
现在,我想知道:因为我已经将每个参数存储在HashMap中,为每个参数保留一个具有正确类型的单独字段真的有意义吗?每次我需要时,将String参数转换为本机类型的计算开销是多少,因为我需要经常使用它们?
谢谢
Tunnuz
我正在读一篇关于iPhone编程的帖子,我注意到关于Objective C++的讨论,帖子中显示的代码看起来主要像Objective-C,但C++中也有几个片段.是否真的可以用C++编写Cocoa?
我正在写,参照这个问题这一个,我昨天写.经过一些文档记录后,我觉得我想做的事情(以及我认为可行的事情)几乎是不可能的,如果不是不可能的话.有几种方法可以实现它,因为我不是一个经验丰富的程序员,我问你会选择哪种方式.我再次解释我的问题,但现在我有一些解决方案需要探索.
我需要的
我有一个Matrix类,我想在矩阵之间实现乘法,以便类的使用非常直观:
Matrix a(5,2);
a(4,1) = 6 ;
a(3,1) = 9.4 ;
... // And so on ...
Matrix b(2,9);
b(0,2) = 3;
... // And so on ...
// After a while
Matrix i = a * b;
Run Code Online (Sandbox Code Playgroud)
我昨天有什么
目前我超载了两个操作员operator*,operator=并且直到昨天晚上才以这种方式定义:
Matrix& operator*(Matrix& m);
Matrix& operator=(Matrix& m);
Run Code Online (Sandbox Code Playgroud)
operator*Matrix return = new Matrix(...)在堆上实例化一个新的Matrix对象(),设置值,然后只需:
return *result;
Run Code Online (Sandbox Code Playgroud)
我今天拥有的
在讨论之后,我决定以"不同的方式"实现它,以避免用户被任何类型的指针打扰并保持使用不变."不同的方式"是通过值传递operator*的返回值:
Matrix operator*(Matrix& m);
Matrix& operator=(Matrix& m);
Run Code Online (Sandbox Code Playgroud)
operator*return在堆栈上实例化,设置值然后返回对象.
这种方法存在问题:它不起作用.operator =期望Matrix&和operator*返回一个Matrix.此外,这种方法对我来说看起来并不那么好,原因是另一个原因:我正在处理矩阵,这可能非常大,而且这个库的目标是1)对我的项目来说足够好2)快,所以可能通过按价值不应该是一种选择.
我探讨了哪些解决方案
好吧,按照前面 …
我担心我的某些代码导致内存泄漏,并且我不确定如何检查它。有没有适用于 MacOS X 的工具或东西?
谢谢
我正在尝试创建一个无窗口的Ogre应用程序,但似乎应用程序完全忽略了RenderWindow :: setVisible(false)方法.有没有办法实现这一目标?
谢谢
Tommaso
我不知道是否有可能做到这一点,但我尝试了几种方法似乎没有任何效果.基本上我需要从几个包含相同类定义的文件中访问相同的静态成员.
// Filename: S.h
class S {
public:
static int foo;
static void change(int new_foo) {
foo = new_foo;
}
};
int S::foo = 0;
Run Code Online (Sandbox Code Playgroud)
然后在类定义(其他.cpp文件)中我有:
// Filename: A.h
#include "S.h"
class A {
public:
void do_something() {
S::change(1);
}
};
Run Code Online (Sandbox Code Playgroud)
在另一个文件中:
// Filename: program.cpp
#include "S.h"
#include "A.h"
int main (int argc, char * const argv[]) {
A a = new A();
S::change(2);
std::cout << S::foo << std::endl;
a->do_something();
std::cout << S::foo << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
现在,我希望第二个函数调用将S :: foo更改为1,但输出仍然是:
2 …Run Code Online (Sandbox Code Playgroud) 我有一段代码创建一个已知大小的std :: vector <T>:
std::vector<T> vectorOfTs(n);
Run Code Online (Sandbox Code Playgroud)
调用push_back会将大小增加到n + 1吗?
vectorOfTs.push_back(T());
Run Code Online (Sandbox Code Playgroud) 我正在为R + ggplot2中的两个数据集生成箱形图,我正在使用构面来打印基于两个因素的图形网格.到目前为止一直很好,重点是两个数据集中的一个是一个因子的一个级别的完全缺失值,因此我得到一个5 x 5的网格和一个5 x 4的网格,但这些网格意味着进行眼睛比较,因此我想显示缺失值的空图.那可能吗?
谢谢,托马索
我有一个由几个字段组成的类,我有几个构造函数.我也有一个不带任何参数的构造函数,但是当我尝试使用它时:
int main {
A a;
}
Run Code Online (Sandbox Code Playgroud)
编译器生成错误,而如果我像这样使用它:
int main {
A a();
}
Run Code Online (Sandbox Code Playgroud)
没关系.那是什么?
谢谢
我有一个类A,包含两个指向另一个类B的对象的指针.我想初始化一个指针或另一个指针,具体取决于传递给哪一个init(),这也需要其他参数.我的情况如下:
class A {
public:
A();
init(int parameter, int otherParameter, B* toBeInitialized);
protected:
B* myB;
B* myOtherB;
};
Run Code Online (Sandbox Code Playgroud)
现在我的意思是我想打电话给init():
init(640, 480, this->myB);
Run Code Online (Sandbox Code Playgroud)
要么
init(640, 480, this->myOtherB);
Run Code Online (Sandbox Code Playgroud)
现在,我的init实现为:
void init( int parameter, int otherParameter, B* toBeInitialized ) {
toBeInitialized = someConstructorFunction(parameter, otherParameter);
}
Run Code Online (Sandbox Code Playgroud)
问题是两个指针没有初始化,我怀疑toBeInitialized被覆盖,但原始参数没有被修改.
我做错了什么?我应该使用指针的引用吗?
谢谢
Tommaso
c++ ×7
macos ×2
parameters ×2
scope ×2
casting ×1
class ×1
cocoa ×1
constructor ×1
copy ×1
facets ×1
file ×1
ggplot2 ×1
heap-memory ×1
interface ×1
java ×1
memory-leaks ×1
objective-c ×1
ogre ×1
ogre3d ×1
performance ×1
pointers ×1
push-back ×1
r ×1
reference ×1
return ×1
static ×1
types ×1
vector ×1
window ×1
windows ×1