小编MSa*_*ers的帖子

放置新的和非默认的构造函数

我可以在带有参数的构造函数上调用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与非默认构造函数一起工作正常.

c++ placement-new new-operator

12
推荐指数
1
解决办法
7318
查看次数

C++使用方括号和实例指针

我创建了一个单例类,它使用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++ pointers class operand

12
推荐指数
1
解决办法
9980
查看次数

用于封闭源应用程序的C++压缩(zip)库

请为商业的闭源应用程序推荐C++压缩(zip)库.所以,不是GPL许可证.

这是我的日常工作......

c++ compression zip

11
推荐指数
2
解决办法
5908
查看次数

C++中的Singleton和Abstract基类

最近我遇到了关于实现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++ singleton

11
推荐指数
2
解决办法
2万
查看次数

有人可以解释这个C++ typedef吗?

我已经开始使用C++了很长一段时间没用过它.虽然大部分都是有意义的,但有一些我觉得有点困惑.例如,有人可以解释这一行的作用:

typedef bool (OptionManager::* OptionHandler)(const ABString& value);
Run Code Online (Sandbox Code Playgroud)

c++ typedef

11
推荐指数
2
解决办法
639
查看次数

在有向树(igraph)中从一个节点到另一个节点的所有可能路径

我使用python绑定igraph来表示有向树.我想找到从该图中的一个节点到另一个节点的所有可能路径.不幸的是,我无法在执行此任务的igraph中找到准备使用的功能?

编辑

对无限数量路径的关注

我所说的图实际上是一个带有单根的有向无环图(DAG).它代表了一个单向的级联事件,在级联的各个级别上,可以分裂或连接在一起.正如我所说,这是一个单向图.还规定图表不包含任何循环.由于这两个原因,无限的路径列表是不可能的.

我想做什么?

我的目标是找到从图形顶部(根)到给定节点的所有可能路径.

python algorithm igraph directed-acyclic-graphs

11
推荐指数
1
解决办法
1万
查看次数

如何计算整数中的零位数?

我将如何在C++中找到"零"位的数量.假设我有一个整数;

int value = 276; 
Run Code Online (Sandbox Code Playgroud)

我有100010100位,但我如何计算零?

c++ bits

11
推荐指数
6
解决办法
3万
查看次数

如何在C++中解析表达式

我想解析res =((a*(2 + b))/ c)+5.603+(6*(d ^ 5))等表达式.我想只用c ++做.

c++ parsing expression

11
推荐指数
1
解决办法
1513
查看次数

如何从AVX寄存器中获取数据?

使用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

c++ avx visual-c++ fma

11
推荐指数
2
解决办法
4835
查看次数

错误C2719:'_ VAL':带__declspec(align('16'))的形式参数将不对齐?

我正在尝试D3DXMATRIXA16像这样创建一个向量:vector<D3DXMATRIXA16> matrices;我收到错误:

     d:\Program Files\Microsoft Visual Studio 9.0\VC\include\vector(717) :
Run Code Online (Sandbox Code Playgroud)

错误C2719:'_ VAL':带__declspec的形式参数(对齐('16'))将不对齐

    e:\projects\emuntitled\em\emscratch\emshadow.h(60) :
Run Code Online (Sandbox Code Playgroud)

:请参阅使用[_Ty = D3DXMATRIXA16]编译的类模板实例化'std :: vector <_Ty>'的引用

为什么呢?

谢谢你的帮助!

c++ directx vector matrix alignment

10
推荐指数
1
解决办法
1万
查看次数