我试图找到一种在D中使用C++类的方法.
http://www.digitalmars.com/d/2.0/cpp_interface.html
D不能调用C++特殊成员函数,反之亦然.这些包括构造函数,析构函数,转换运算符,运算符重载和分配器.
所以,我试图将这些C++函数愚蠢地转换为C风格的函数调用.这是我正在使用的证据.
class someClass {
public:
someClass();
char *whatSayYou();
};
extern "C"
{
someClass *hearMeOut();
}
Run Code Online (Sandbox Code Playgroud)
#include "helper.h"
someClass::someClass()
{
}
char *someClass::whatSayYou()
{
return "Everything is gravy";
}
someClass *hearMeOut()
{
return new someClass;
}
Run Code Online (Sandbox Code Playgroud)
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) 这是我最近遇到的一个问题.谷歌似乎没有答案所以我把它带给堆栈溢出的好人.
我正在寻找一种使用函数输出填充列表的简单方法.像这样的东西:
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) 我不知道这里发生了什么.请解释.码...
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)