小编Tyg*_*g13的帖子

首次使用之前必须明确专业化

我需要能够将存根代码插入到模板函数中,其中存根代码是专门的。如果我使用像这样的蹦床,大多数编译器都允许这样做

template <class T>
T foo(T t) {
   if(Stub<T>::enabled) {
      return Stub<T>::stub(t);
   }
   /* actual code here */
}

/* use of foo occurs here */

template <>
int Stub<int>::stub(int) { /* stub code */ }
Run Code Online (Sandbox Code Playgroud)

至少这适用于大多数版本的 GCC、clang 和 MSVC。有一些旧版本的 GCC 和 GCC 派生编译器不接受这一点,并抱怨Stub<T>::stub首次使用后无法发生显式特化。

我的问题是 - 这些编译器是否有解决方法 - 如果没有,就标准而言这是允许的吗?或者我是否依赖 GCC/Clang/MSVC 来“做正确的事”?

c++ templates template-specialization

4
推荐指数
1
解决办法
2163
查看次数

使用所有默认值初始化记录类型的常量变量

说我有一个类型

type Record_T is
   record
      VAR1 : integer := 1;
      VAR2 : string  := "";
   end record;
Run Code Online (Sandbox Code Playgroud)

如果要初始化此类型的常量变量,可以通过以下几种方法来实现:

Null_Record : constant Record_T := (1, "");
Null_Record : constant Record_T := Record_T'(1, "");
Run Code Online (Sandbox Code Playgroud)

但这迫使我先指定默认值,然后再进行指定。

我尝试了以下所有方法,但均无济于事

Null_Record : constant Record_T := ();
Null_Record : constant Record_T := Record_T'();
Null_Record : constant Record_T;
Run Code Online (Sandbox Code Playgroud)

但是必须有某种方法可以做到吗?至少,如果艾达缺乏这种能力,我会感到非常惊讶。

ada

1
推荐指数
1
解决办法
49
查看次数

标签 统计

ada ×1

c++ ×1

template-specialization ×1

templates ×1