Есть ли способ использовать имена функций mixin (или для любых имен членов), кроме строк mixin?Имена функций Mixin
В настоящее время я делаю это так:
mixin template PacketValue(T, string name, PacketMode mode, size_t offset) {
import std.string : format;
static if (mode == PacketMode.both || mode == PacketMode.write) {
enum writePacketFormat = "void %s(T value) { write!T(value, offset); }";
mixin(format(writePacketFormat, name));
}
static if (mode == PacketMode.both || mode == PacketMode.read) {
enum readPacketFormat = "auto %s() { return read!T(offset); }";
mixin(format(readPacketFormat, name));
}
}
И он используется отл. например:
class WritePacket : Packet!(PacketMode.write) {
public:
this(ushort size) {
super(cast(ushort)1001, cast(ushort)(4 + size));
}
@property {
mixin PacketValue!(uint, "value1", PacketMode.write, 4);
mixin PacketValue!(uint, "value2", PacketMode.write, 8);
mixin PacketValue!(ushort, "value3", PacketMode.write, 12);
}
}
Если значениями «value1», «value2» и «value3» будут имена функций. В этом случае функции свойств.
Мне было просто интересно, есть ли лучший способ достичь этого или нет.
Ответы на http://stackoverflow.com/questions/28814898/mixins-names-parameterization-with-template- аргумент может представлять интерес. – rcorre
Нет, уже видел. Они полагаются на то же, что и я, используя строки. Это то, о чем я спрашивал, можно ли избежать. – Bauss
Вторая часть этого ответа, используя псевдонимы для получения более приятного имени, я думаю, что лучше всего вы можете это сделать. –