有没有办法用 C++ 以外的任何类型语言编写泛型类型的泛型工厂?

问题描述 投票:0回答:1

给出以下 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。

c++
1个回答
0
投票

是的,有很多这样的语言。您正在描述函子(该词在 C++ 中有不同的用法)。

data_transformer(x)
大约是 Haskell 的
flip fmap x

© www.soinside.com 2019 - 2024. All rights reserved.