我可以在带有参数的构造函数上调用C++ placement new吗?我正在实现一个自定义分配器,并希望避免将功能从非默认构造函数移动到init函数.
class CFoo
{
public:
int foo;
CFoo()
{
foo = 0;
}
CFoo(int myFoo)
{
foo = myFoo;
}
};
CFoo* foo = new (pChunkOfMemory) CFoo(42);
Run Code Online (Sandbox Code Playgroud)
我希望使用第二个构造函数在pChunkOfMemory上构造CFoo类型的对象.当使用operator new时,我只使用默认构造函数?
解决了!我没有#include <new>.在此之后,调用placement :: new与非默认构造函数一起工作正常.
我创建了一个单例类,它使用GetInstance()方法获取实例地址(指针).在类中,我有一个unsigned long int数组,我已经operator []为它创建了它(直接访问数组).我如何使用我得到的指针GetInstance才能使用[] operator?我试过了 :
class risc { // singleton
protected:
unsigned long registers[8];
static risc* _instance;
risc() {
for (int i=0;i<8;i++) {
registers[i]=0;};
}
public:
unsigned long operator [](int i) const {return registers[i];}; // get []
unsigned long & operator [](int i) {return registers[i];}; // set []
static risc* getInstance() { // constructor
if (_instance==NULL) {
_instance=new risc();
}
return _instance;
}
};
risc* Risc=getInstance();
*Risc[X]=...
Run Code Online (Sandbox Code Playgroud)
但它不起作用...有没有办法可以使用括号直接使用类指针访问数组?
谢谢 !
请为商业的闭源应用程序推荐C++压缩(zip)库.所以,不是GPL许可证.
这是我的日常工作......
最近我遇到了关于实现Singleton但是涉及抽象基类的问题.假设我们有这样的类层次结构:
class IFoo {...}; // it's ABC
class Foo : public IFoo {...};
Run Code Online (Sandbox Code Playgroud)
我们有单例类定义如下:
template <typename T>
class Singleton
{
public:
static T* Instance() {
if (m_instance == NULL) {
m_instance = new T();
}
return m_instance;
}
private:
static T* m_instance;
};
Run Code Online (Sandbox Code Playgroud)
所以,如果我想使用如下:IFoo::Instance()->foo();我该怎么办?
如果我这样做:class IFoo : public Singleton<IFoo> {...};它将无法工作,因为Singleton将调用IFoo的ctor,但IFoo是一个ABC,因此无法创建.
而且:这个class Foo : public IFoo, public Singleton<Foo> {...};也行不通,因为这种类IFoo没有方法Instance()的接口,所以调用IFoo::Instance()会失败.
有任何想法吗?
我已经开始使用C++了很长一段时间没用过它.虽然大部分都是有意义的,但有一些我觉得有点困惑.例如,有人可以解释这一行的作用:
typedef bool (OptionManager::* OptionHandler)(const ABString& value);
Run Code Online (Sandbox Code Playgroud) 我将如何在C++中找到"零"位的数量.假设我有一个整数;
int value = 276;
Run Code Online (Sandbox Code Playgroud)
我有100010100位,但我如何计算零?
我想解析res =((a*(2 + b))/ c)+5.603+(6*(d ^ 5))等表达式.我想只用c ++做.
使用MSVC 2013和AVX 1,我在寄存器中有8个浮点数:
__m256 foo = mm256_fmadd_ps(a,b,c);
Run Code Online (Sandbox Code Playgroud)
现在我要打电话inline void print(float) {...}给所有8个花车.看起来英特尔 AVX内置技术会让这个变得相当复杂:
print(_castu32_f32(_mm256_extract_epi32(foo, 0)));
print(_castu32_f32(_mm256_extract_epi32(foo, 1)));
print(_castu32_f32(_mm256_extract_epi32(foo, 2)));
// ...
Run Code Online (Sandbox Code Playgroud)
但MSVC甚至没有这两种内在函数.当然,我可以将值写回内存并从那里加载,但我怀疑在汇编级别没有必要溢出寄存器.
奖金问:我当然喜欢写作
for(int i = 0; i !=8; ++i)
print(_castu32_f32(_mm256_extract_epi32(foo, i)))
Run Code Online (Sandbox Code Playgroud)
但MSVC并不了解许多内在函数需要循环展开.如何在8x32浮点数上写一个循环__m256 foo?
我正在尝试D3DXMATRIXA16像这样创建一个向量:vector<D3DXMATRIXA16> matrices;我收到错误:
Run Code Online (Sandbox Code Playgroud)d:\Program Files\Microsoft Visual Studio 9.0\VC\include\vector(717) :错误C2719:'_ VAL':带__declspec的形式参数(对齐('16'))将不对齐
Run Code Online (Sandbox Code Playgroud)e:\projects\emuntitled\em\emscratch\emshadow.h(60) ::请参阅使用[_Ty = D3DXMATRIXA16]编译的类模板实例化'std :: vector <_Ty>'的引用
为什么呢?
谢谢你的帮助!