如何在程序集中定义编译时常量?

How to define a compile time constant in an assembly?

首先:我正在使用C++-CLI,但我也想知道C#的解决方案。

使用以下代码

程序集"basics"

public ref class CONSTS abstract sealed
{
public:
  static const int  SUCCESS     = 1;
  static const int  InProgress  = 101;
};

程序集"program"

enum class EnumReplyLLI
{
  Nothing = 0,
  SUCCESS = CONSTS::SUCCESS,      // C2057
  Busy    = CONSTS::InProgress,   // C2057
  ...
};

我收到错误 C2057: 预期的常量表达式

如何定义编译时常量并在另一个程序集中使用它?
我的代码与 this SO post 中接受的答案几乎相同,但这不起作用。

不确定为什么它在 C++ 中不起作用,但这是 C# 中的等效代码:

public static class CONSTS 
{
  public const int  SUCCESS     = 1;
  public const int  InProgress  = 101;
};

enum EnumReplyLLI
{
  Nothing = 0,
  SUCCESS = CONSTS.SUCCESS,     
  Busy    = CONSTS.InProgress,  
};

C# constC++/CLI 中的实际等价物是 literal,所以你的 CONSTS class 应该是这样的:

public ref class CONSTS abstract sealed
{
public:
    literal int  SUCCESS = 1;
    literal int  InProgress = 101;
};