【发布时间】:2021-05-12 15:03:23
【问题描述】:
我正在尝试将模板化的 lambda 传递给函数,然后使用模板参数调用它,以启用该函数的自定义类型的特化。
但是当我尝试调用 lambda 时,我得到了这个错误:error: invalid operands to binary expression
对于任何想玩这个的人来说,这里有一个神螺栓链接:https://gcc.godbolt.org/z/qYPcea
#include <cstdint>
#include <string>
#include <cstring>
enum class Alignment : uint8_t {
one,
two,
four,
eight
};
template <Alignment alignment, typename T>
static void align(T& pointer)
{
intptr_t& value = reinterpret_cast<intptr_t&>(pointer);
value += (-value) & ((uint64_t)alignment - 1);
}
template<typename Lambda, typename T>
static void specialization(Lambda&& lambda, const T& t)
{
lambda<Alignment::eight>(t.data(), t.size());
}
int main()
{
uint8_t buffer[1024];
void *writeTo = buffer;
auto lambda = [&] <Alignment alignment> (const void *input, uint32_t inputSize) -> void
{
align<alignment>(writeTo);
writeTo = memcpy(writeTo, buffer, inputSize);
};
std::string input("helloworld");
specialization(lambda, input);
return 0;
}
【问题讨论】:
标签: c++ templates lambda c++20