我需要能够将存根代码插入到模板函数中,其中存根代码是专门的。如果我使用像这样的蹦床,大多数编译器都允许这样做
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 来“做正确的事”?
说我有一个类型
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)
但是必须有某种方法可以做到吗?至少,如果艾达缺乏这种能力,我会感到非常惊讶。