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

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.
}

最佳答案

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 = const FooStruct(5);

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

08-28 19:11