小编Jac*_*lch的帖子

在D中使用C++类

我试图找到一种在D中使用C++类的方法.

http://www.digitalmars.com/d/2.0/cpp_interface.html

D不能调用C++特殊成员函数,反之亦然.这些包括构造函数,析构函数,转换运算符,运算符重载和分配器.

所以,我试图将这些C++函数愚蠢地转换为C风格的函数调用.这是我正在使用的证据.

helper.h

class someClass {
    public:
        someClass();
        char *whatSayYou();
};

extern "C"
{
    someClass *hearMeOut();
}
Run Code Online (Sandbox Code Playgroud)

helper.cpp

#include "helper.h"

someClass::someClass()
{

}

char *someClass::whatSayYou()
{
    return "Everything is gravy";
}


someClass *hearMeOut()
{
    return new someClass;
}
Run Code Online (Sandbox Code Playgroud)

main.d

import std.stdio;

int main(string[] args)
{
    someClass *awesomeExample = hearMeOut();
    char *shoutoutToTheWorld = awesomeExample.whatSayYou();
    writefln(std.string.toString(shoutoutToTheWorld));
    return 0;
}


extern (C++)
{
    interface someClass
    {
        char *whatSayYou();
    }

    someClass *hearMeOut();
}
Run Code Online (Sandbox Code Playgroud)

以下是我如何遵守它.

g++-4.3 -c -I code/dg3d_helper -I /usr/local/include/ -o code/dg3d_helper/helper.o …
Run Code Online (Sandbox Code Playgroud)

c++ d class segmentation-fault

10
推荐指数
2
解决办法
665
查看次数

在python中填充callable或lambda中的列表或元组

这是我最近遇到的一个问题.谷歌似乎没有答案所以我把它带给堆栈溢出的好人.

我正在寻找一种使用函数输出填充列表的简单方法.像这样的东西:

fill(random.random(), 3) #=> [0.04095623, 0.39761869, 0.46227642]
Run Code Online (Sandbox Code Playgroud)

以下是我发现的其他方法.但我对它们并不满意,因为它们看起来效率低下.

results = []
for x in xrange(3): results.append(random.random())
#results => [0.04095623, 0.39761869, 0.46227642]
Run Code Online (Sandbox Code Playgroud)

和

map(lambda x: random.random(), [None] * 3)
#=> [0.04095623, 0.39761869, 0.46227642]
Run Code Online (Sandbox Code Playgroud)

建议?


感谢所有的答案.我知道有一种更蟒蛇式的方式.

对效率问题......

$ python --version
Python 2.7.1+
$ python -m timeit "import random" "map(lambda x: random.random(), [None] * 3)"
1000000 loops, best of 3: 1.65 usec per loop
$ python -m timeit "import random" "results = []" "for x in xrange(3): results.append(random.random())"
1000000 loops, best of …
Run Code Online (Sandbox Code Playgroud)

python arrays tuples list callable

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

无法在D语言中将接口作为指针传递

我不知道这里发生了什么.请解释.码...

import std.stdio;

void main(string[] args)
{
    ClassObject ss1 = new ClassObject("First Class");
    writeln(ss1.produce());
    ClassObject ss2 = new ClassObject("Some Class");
    ClassObject* ss3 = &ss2;
    voidclass(ss3);
    ClassObject ss4 = new ClassObject("Final Class");
    passinterface(ss4);
    ClassObject* ss5 = &ss4;
    writeln(ss5.produce());
    voidinterface(ss5);
}

public void voidclass(void* arg)
{
    ClassObject* ss = cast(ClassObject*) arg;
    writeln(ss.produce());
    writeln(ss.produce);
    ClassObject ssnp = *ss;
    writeln(ssnp.produce());
    writeln(ssnp.produce);
}

public void voidinterface(void* arg)
{
    IObject* bob = cast(IObject*) arg;
    writeln(bob.produce());
}

public void passinterface(IObject arg)
{
    writeln(arg.produce());
}

interface IObject
{ …
Run Code Online (Sandbox Code Playgroud)

d interface

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

标签 统计

d ×2

arrays ×1

c++ ×1

callable ×1

class ×1

interface ×1

list ×1

python ×1

segmentation-fault ×1

tuples ×1