小编Mos*_*sid的帖子

在haskell中使用类型族中的多态类型

我正在学习类型家庭,但它太混乱了.当我在类定义之外定义多态类型时,它运行良好.

{-# LANGUAGE Rank2Types #-}
type T = Num a => a
Run Code Online (Sandbox Code Playgroud)

但是当在类定义中定义多态类型时,

{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE Rank2Types #-}

data D = D

class A a where
    type T a :: *
instance A D where
    type T D = Num a => a 
Run Code Online (Sandbox Code Playgroud)

然后编译器显示错误:

Illegal polymorphic or qualified type: forall a. Num a => a
In the type instance declaration for 'T'
In the instance declaration for 'A D'
Run Code Online (Sandbox Code Playgroud)

有没有办法在类中返回类型为多态的函数,如3(Num a => a)?

haskell

7
推荐指数
0
解决办法
386
查看次数

C++在赋值类变量时使用大括号

当我在C++中声明一个数组时,我可以像这样使用大括号:

int var[3] = {1, 2, 3};
Run Code Online (Sandbox Code Playgroud)

我可以在类中使用大括号声明,比如运算符重载吗?我的意思是,像这样:

class example
{
private:
    int m_sum;
public:
    void operator{}(int a, int b, int c)
    {
        m_sum = a+b+c;
    }
    int get_sum()
    {
        return m_sum;
    }
}

int main()
{
    example ex = {1, 2, 3};
    std::cout << ex.get_sum() << endl; // prints 6
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码只是我的想象,但我想使用大括号作为此代码.

c++

3
推荐指数
1
解决办法
1583
查看次数

推导出模板参数的模板参数

有一个类 template A,它以模板类作为其模板参数。

template <typename T> class A {}
template <typename T> class B {}
int main()
{
    A<B<int>>();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

类模板能否A推导出其模板参数(Bint)的模板参数(int)?

或者有没有其他方法可以解决这个问题?例如,

template <typename T<typename U>> class A {}
Run Code Online (Sandbox Code Playgroud)

c++ templates

2
推荐指数
2
解决办法
832
查看次数

标签 统计

c++ ×2

haskell ×1

templates ×1