gpt4 book ai didi

arrays - D 编程语言中的指针、函数和数组

转载 作者:行者123 更新时间:2023-12-05 01:04:49 25 4
gpt4 key购买 nike

我正在编写一个同时输出到多个输出流的方法,我现在设置它的方式是我有一个 LogController , LogFileLogConsole , 后两者是 Log 的实现界面。

我现在正在尝试做的事情是将方法添加到 LogController附加 Log 的任何实现界面。

我想这样做如下:在 LogController我有一个关联数组,其中存储指向 Log 的指针对象。当writeOut LogController 的方法被调用,我希望它然后运行数组的元素并调用它们的writeOut方法也是。后者我可以做到,但事实证明前者很难。

法师/实用程序/LogController.d

module Mage.Utility.LogController;

import std.stdio;

interface Log {
public void writeOut(string s);
}

class LogController {
private Log*[string] m_Logs;

public this() {

}

public void attach(string name, ref Log l) {
foreach (string key; m_Logs.keys) {
if (name is key) return;
}

m_Logs[name] = &l;
}

public void writeOut(string s) {
foreach (Log* log; m_Logs) {
log.writeOut(s);
}
}
}

法师/实用程序/LogFile.d
module Mage.Utility.LogFile;

import std.stdio;
import std.datetime;

import Mage.Utility.LogController;

class LogFile : Log {
private File fp;
private string path;

public this(string path) {
this.fp = File(path, "a+");
this.path = path;
}

public void writeOut(string s) {
this.fp.writefln("[%s] %s", this.timestamp(), s);
}

private string timestamp() {
return Clock.currTime().toISOExtString();
}
}

我已经使用附加功能尝试了多种方法,但都没有。构建失败并出现以下错误:
Mage\Root.d(0,0): Error: function Mage.Utility.LogController.LogController.attach (string name, ref Log l) is not callable using argument types (string, LogFile)

这是罪证功能:
public void initialise(string logfile = DEFAULT_LOG_FILENAME) {
m_Log = new LogController();

LogFile lf = new LogFile(logfile);
m_Log.attach("Log File", lf);
}

谁能告诉我这里哪里出错了?我很困惑,我无法在任何地方找到答案。我尝试了多种不同的解决方案,但都没有奏效。

最佳答案

D 中的类和接口(interface)是引用类型,所以 Log*是多余的 - 删除 * .同样,也无需使用refref Log l - 这就像在 C++ 中通过引用获取指针。

这是您发布错误消息的原因 - 通过引用传递的变量必须在类型上完全匹配。删除 ref应该解决错误。

关于arrays - D 编程语言中的指针、函数和数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22531947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com