小编Yol*_*ola的帖子

shared_ptr如何破坏对齐

我正在阅读关于DirectXMath的文档,并偶然发现了下一篇文章:

作为通过重载new/delete直接在C++类中强制执行对齐的替代方法,您可以使用pImpl惯用法.如果确保您的Impl类在内部通过__aligned_malloc对齐,则可以在内部实现中自由使用对齐的类型.当'public'类是Windows运行时ref类或打算与std :: shared_ptr <>一起使用时,这是一个很好的选择,否则会破坏仔细对齐.

我不明白shared_ptr如何在对齐策略中做任何改变,它只有一个指针,它不会分配一个对象.

c++ stl shared-ptr c++11 directxmath

6
推荐指数
1
解决办法
756
查看次数

Erlang的精确度

下一个代码在结果中给了我5.999999999999998,但正确答案是6.

Alpha = math:acos((4*4 + 5*5 - 3*3) / (2*4*5))
Area = 1/2 * 4 * 5 * math:sin(Alpha)
Run Code Online (Sandbox Code Playgroud)

有可能得到6?

floating-point precision erlang

5
推荐指数
2
解决办法
3692
查看次数

从const调用nonconst成员版本

可能重复:
如何删除类似const和非const成员函数之间的代码重复?

我有两个成员

A &B::GetA (int i)
{
    return *(m_C[m_AtoC[i]]);
}

const A &B::GetA (int i) const
{
    return *(m_C[m_AtoC[i]]);
}
Run Code Online (Sandbox Code Playgroud)

现在我只是重复代码,但可能存在很好的方法来做到这一点.我绝对不想处理从const到非const的类型转换.

编辑:所以我想打电话给另一个成员,以避免代码重复.

c++ overloading const

5
推荐指数
1
解决办法
220
查看次数

gmock 和转发声明的类

假设我有这个类,并且类型 Manager 在 Base.h 中向前声明。

#include <Base.h>

class MockBase : public Base
{
public:
    MOCK_CONST_METHOD0( manager, const Manager&( ) );
    ...
};
Run Code Online (Sandbox Code Playgroud)

我不会在测试中使用此方法,因此我不想将 Manager 类的定义包含到 test.txt 文件中。

但我认为在编译 gmock 时尝试准备错误消息并深入其内部,它需要 Manager 变量的地址,并且我有一个错误:

错误 C2027:使用未定义类型“Manager”\external\googlemock\gtest\include\gtest\gtest-printers.h 146 1

我可以以某种方式避免包含带有我不会使用的方法的前向声明类型定义的文件吗?

c++ forward-declaration googlemock

5
推荐指数
1
解决办法
1482
查看次数

不能设置Mnesia

setup_mnesia(Name) ->
    ?VALUE(application:start(mnesia)),
    ?VALUE(mnesia:create_schema([node()|[Name]])),
    ?VALUE(mnesia:create_table(muppet, [
                        {attributes, record_info(fields, muppet)},
                        {disc_copies, [foo@kos13]}])),
    ?VALUE(mnesia:wait_for_tables([muppet], infinity)),
    ok.
Run Code Online (Sandbox Code Playgroud)

结果是

"application:start(mnesia)"= ok

"mnesia:create_schema([node()| [Name]])"= {error,{foo @ kos13,{already_exists,foo @ kos13}}}

"mnesia:create_table(muppet,[{attributes,record_info(fields,muppet)},{disc_copies,[foo @ kos13]}])"= {aborted,{bad_type,muppet,disc_copies,foo @ kos13}}

EDITED,ADDED如果重写两个进程来调用应用程序:在mnesia之后启动:create_schema它吐出"无法安装回退".在当前目录中出现两个文件--FALLBACK.BUP和foo @ kos13131851070846165246847780.

erlang mnesia

4
推荐指数
1
解决办法
4155
查看次数

传递args作为指针的引用与(no)constness给出不同的地址

void f(char  *  & pch) {
    cout << &pch << " " << pch << endl;
}

int main() {
    char *pch2 = new char[11];
    strcpy(pch2, "1234567890");
    cout << &pch2 << " " << pch2 << endl;
    f(pch2);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

给出下一个输出:

0xbfa0d62c 1234567890 
0xbfa0d62c 1234567890
Run Code Online (Sandbox Code Playgroud)

但如果我按如下方式修改第一行

void f(char const * const & pch) {
Run Code Online (Sandbox Code Playgroud)

我会得到:

0xbfec7df8 1234567890
0xbfec7dfc 1234567890
Run Code Online (Sandbox Code Playgroud)

是因为需要将新的内存单元标记为const或其他东西而出现的指针差异?

c++ pointers const reference

4
推荐指数
1
解决办法
117
查看次数

使用 AES 和 Crypto++ 加密-解密单个块

我需要加密单个 AES 块。我不能使用任何模式,如 CBC 和其他。我所看到的每个示例都使用流模式。

编辑:好的,我用下一种方式做了,但我真的不喜欢这种尝试。

void dec(const byte *key, const byte* xblock, const byte *cipher, byte *plain) {
    AESDecryption d;

    try {
        const NameValuePairs &nvp = MakeParameters("", 0);
        d.UncheckedSetKey(key, 16, nvp);
        d.ProcessAndXorBlock(cipher, xblock, plain);
    }
    catch(...) {}
}
Run Code Online (Sandbox Code Playgroud)

c++ cryptography crypto++ block-cipher

4
推荐指数
1
解决办法
1990
查看次数

`sequenceA`的工作原理

我是Haskell的新手,并试图了解它是如何工作的?

sequenceA [(+3),(+2),(+1)] 3
Run Code Online (Sandbox Code Playgroud)

我从定义开始

sequenceA :: (Applicative f) => [f a] -> f [a]  
sequenceA [] = pure []  
sequenceA (x:xs) = (:) <$> x <*> sequenceA xs
Run Code Online (Sandbox Code Playgroud)

然后展开递归到此

(:) <$> (+3) <*> $ (:) <$> (+2) <*> $ (:) <$> (+1) <*> pure [] 
(:) <$> (+3) <*> $ (:) <$> (+2) <*> $ (:) <$> (+1) <*> []
Run Code Online (Sandbox Code Playgroud)

但是在这里我不明白将为哪个应用程序运算符操作符<*>调用for for for ((->) r)或for[]

(:) <$> (+1) <*> []
Run Code Online (Sandbox Code Playgroud)

有人可以一步一步地逐步解析sequenceA [(+3),(+2),(+1)] 3吗?谢谢.

haskell applicative

4
推荐指数
2
解决办法
1014
查看次数

auto foo(...) - > decltype(this)有一些解决方法吗?

我有下一个类,并尝试声明成员函数,它将返回指向该类型但下一个代码的指针

template<class Key, int b> class b_plus_tree_inner_node {
  auto split() -> decltype(this) {}
};
Run Code Online (Sandbox Code Playgroud)

给了我这样的错误

在顶层无效使用'this'

我可以用另一种方式做到这一点,我现在关于typedef的存在,但是它可能与decltype有关吗?

编辑:

我想完成这个:

b_plus_tree_inner_node<Key, b>* split() {...}
Run Code Online (Sandbox Code Playgroud)

c++ c++11

3
推荐指数
1
解决办法
946
查看次数

继承泛型作为函数参数

我怎么能做到这一点?

class A { }
class B : A { }

class X<T> where T : A { }
class Y<T> : X<T> where T : A { }

private static void f(X<A> x) { }

public static void Main(string[] args)
{
    Y<B> y = new Y<B>();
    f(y); // Compiler error here
}
Run Code Online (Sandbox Code Playgroud)

Y从A继承自X,B,但它没有被编译.

c# generics inheritance parameter-passing

3
推荐指数
1
解决办法
53
查看次数