给出以下 C++ 代码片段
#include <print>
template<typename D>
struct data_container {
D content;
};
template<template<typename> class S, typename T>
class data_transformer {
S<T> data;
public:
data_transformer(S<T> data) : data{data} {}
auto transform(auto handler) {
return S{handler(data)};
};
};
auto convert_to_string = [](auto it){ return std::to_string( it.content ); };
int main() {
auto data = data_container { 42 };
// data is a data_container<int>
auto transformer = data_transformer { data };
auto result = transformer.transform (convert_to_string);
// result is a data_container<std::string>
std::println( "{}", result.content + "!" );
}
有没有办法在任何其他类型的语言中正确地描述像上面的代码这样的东西?即泛型类型
D<G<T>>
,其方法返回传递给 D 的相同泛型类型 G,但具有不同的特化,如 G<O>
。
注意。 我更喜欢将转换方法签名写为
auto transform(auto handler)
以便更简洁,但它也可以用模板编写。它可能是这样的 template<class D> S<D> transform(D handler (S<T>))
,其中 convert_to_string
写成普通函数而不是 lambda。