【问题标题】:Const struct in DD 中的 const 结构
【发布时间】:2018-06-17 11:19:00
【问题描述】:

我正在尝试将结构作为编译时参数传递给函数。 我认为代码是不言自明的。我相当肯定这应该有效。但我不知道为什么它不起作用。

void main(string[] args)
{
    const FooStruct fooStruct = FooStruct(5);

    barFunction!fooStruct();
}

public struct FooStruct()
{
    private const int value_;
    @property int value() { return value_; }

    this(int value) const
    {
        value_ = value;
    }
}

public static void barFunction(FooStruct fooStruct)
{
    fooStruct.value; /// do something with it.
}

【问题讨论】:

    标签: struct constants d


    【解决方案1】:
    public struct FooStruct()
    

    在这里,您将 FooStruct 声明为没有变量的模板结构。如果这是您想要的,您需要在此行参考FooStruct!()

    public static void barFunction(FooStruct fooStruct)
    

    由于FooStruct 不接受模板参数,因此实际上不需要对其进行模板化,您可能应该像这样声明它:

    public struct FooStruct
    

    执行此操作时,错误消息将更改为 constructor FooStruct.this (int value) const is not callable using argument types (int)。那是因为您正在调用可变构造函数。要解决此问题,请将第 3 行更改为 const FooStruct fooStruct =constFooStruct(5);

    最后,当您调用barFunction 时,您正在尝试将fooStruct 作为模板参数(barFunction!fooStruct()) 传递。由于barFunction 不是模板函数,因此失败。你的意思可能是barFunction(fooStruct)

    【讨论】:

    • 我看到我将我的问题简化为这个例子并出现了一些翻译错误。但你明白我想要什么。看来我没有做'const FooStruct fooStruct = const FooStruct(5);'而是做了'const FooStruct fooStruct = FooStruct(5);'这导致了错误。你知道的越多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-07
    • 1970-01-01
    • 1970-01-01
    • 2014-08-08
    相关资源
    最近更新 更多