D는 이기종 컨테이너 (즉, 다른 유형을 보유하고있는 배열)를 지원합니까?D를위한 이기종 컨테이너
필자는 튜플에 대해 알고 있지만 함수에서 "반환 할 수 없다"는 제한은 내가 염두에두고있는 목적을 없앤다.
D는 이기종 컨테이너 (즉, 다른 유형을 보유하고있는 배열)를 지원합니까?D를위한 이기종 컨테이너
필자는 튜플에 대해 알고 있지만 함수에서 "반환 할 수 없다"는 제한은 내가 염두에두고있는 목적을 없앤다.
D1에 대해 잘 모르기 때문에 D2를 사용한다고 가정합니다.
std.typecons
에는 tuple
과 Tuple
이 있으며 런타임 값을 만들 때 언급 한 "반환 할 수없는"일명 컴파일 타임 튜플을 사용할 수 있습니다.
import std.typecons, std.stdio;
Tuple!(int, string, int[]) f() {
return tuple(5, "xyz", [3, 4, 5]);
}
void main() {
auto x = f();
writefln("%s is %s", x[1], x[0]);
//indices have to be copile-time constants
}
를 사용하여 값 tuple(v1, v2)
및 Tuple!(T1, T2)
이 유형의로.
컴파일 할 때 유형을 모르는 경우 std.variant
을 가져온 다음 Variant[]
을 이러한 목록으로 사용하십시오.
는 변형 []와 VariantArray를은() 일을 할 것, 여기에 내가 완전성이를 추가 할 것입니다 몇 가지 예
module test;
import std.variant, std.stdio;
Variant[] f() {
return variantArray(5, "xyz", [3, 4, 5]);
}
void main() {
auto x = f();
writeln(x); // [5, xyz, [3, 4, 5]]
writefln("%s is %s", x[1], x[0]); // xyz is 5
x ~= Variant(890);
string s = "abc";
x ~= Variant(s);
class C {};
x ~= Variant(new C());
x ~= Variant(new int[2]);
x[$-1][0] = 5;
foreach (e; x) {
write(e, " "); // 5 xyz [3, 4, 5] 890 abc test.main.C [5, 0]
}
f2(x);
Variant[] a = variantArray("23", 23);
Variant[] b = new Variant[3];
Variant[] c = [Variant(12), Variant("a")];
}
void f2(Variant[] va) {
writeln(typeid(va)); // std.variant.VariantN!(maxSize).VariantN[]
}
입니다.
방금 boxArray (std.boxer에서)에 대해 알아 냈습니다. 해결책 일 수도 있습니다.
std.boxer : "이 모듈은 단계적으로 제거되고 있습니다. 새 코드에 std.variant를 사용하고 싶을 수도 있습니다." – fwend
튜플은 반환 할 수 있습니다. 유형 튜플이 아닙니다. 그들은 조금 다릅니다. – Mehrdad