恕我直言,OOPS,设计模式是有道理的,我已经能够实际应用它们.
但是当谈到 Modern C++类的"泛型编程/元编程"时,我感到很困惑.
- 这是一种新的编程/设计范式吗?
- 它仅限于"图书馆开发"吗?如果没有,那么设计/编码情况需要使用元编程/泛型编程.
- 使用模板意味着我正在进行通用编程吗?
我在这个主题上搜索了很多,但没有完全掌握大图.另见这篇文章.
在阅读了这里的讨论之后,到目前为止,我确信(可能仍然不正确):
a)通用编程和元编程是两个不同的概念.
究竟有什么区别?似乎这些术语可以互换使用,但是阅读了Objective-c的维基百科条目,我遇到了:
除了C的过程编程风格之外,C++还直接支持某些形式的面向对象编程,泛型编程和元编程.
参考C++.显然他们有所不同?
我有一个代码:
namespace mymap {
template <class Key,template <typename T > class Allocator> myownmap {
typedef pair<const unsigned int, Key> typename _myPair;
typedef multimap<unsigned int, Key,less<Key> ,Allocator<_myPair> > typename _entriesType;
}
}
Run Code Online (Sandbox Code Playgroud)
它在MSVC下成功编译(和工作),但是gcc抱怨语法无效:
.hpp:20: error: expected nested-name-specifier before ‘_myPair’
.hpp:20: error: two or more data types in declaration of ‘_myPair’
Run Code Online (Sandbox Code Playgroud)
我做错了什么?
在Haskell中,你可以得到Functor,Foldable并Traversable自动使用deriving.Applicative但是,没有办法得出.考虑到有一种明显的方法来定义一个Applicative实例(相当于一个压缩的应用程序),有没有办法启用deriving Applicative?
在我的工作场所,我们倾向于使用 iostream,字符串,向量,地图和奇数算法或两个.我们实际上并没有发现很多情况,模板技术是问题的最佳解决方案.
我在这里寻找的是想法,以及可选的示例代码,它们展示了您如何使用模板技术为您在现实生活中遇到的问题创建新的解决方案.
作为贿赂,期待对你的答案进行投票.
让我们说我们有
data D = X Int | Y Int Int | Z String
Run Code Online (Sandbox Code Playgroud)
我希望有一个功能 getDConst
getDConst :: D -> String
Run Code Online (Sandbox Code Playgroud)
根据用于输入的数据构造函数返回"X","Y"或"Z".是否有一种通用的方法来编写它而不必case对每个数据构造函数进行编写?(我可以使用依赖于Data.Typeable类似的解决方案)
我有一个记录集合,分布在一个相互引用的大型Haskell应用程序中的多种类型中.涉及的所有类型都实现了一个共同的类型类.类型类包含对变量及其所有子项起作用的para函数,非常类似于uniplate的函数.
这是我想要构建的简化代码示例.是否有可能(并且合理)获得通用功能来折叠在GHC中实现给定类型类的记录字段...
{-# LANGUAGE RankNTypes #-}
myPara :: forall a r . (Data a, Foo a)
=> (forall b . Foo b => b -> [r] -> r)
-> a
-> r
-- or as a fold
myFold :: forall a r . (Data a, Foo a)
=> (forall b . Foo b => r -> b -> r)
-> r
-> b
-> r
Run Code Online (Sandbox Code Playgroud)
但通用到足以与任意类型类一起使用?
{-# LANGUAGE ExistentialQuantification #-}
{-# LANGUAGE DeriveDataTypeable #-}
import Data.Data
import Data.Generics.Uniplate.Data …Run Code Online (Sandbox Code Playgroud) haskell generic-programming existential-type higher-rank-types
我需要了解Inheritance & virtual functions在C++ 中是否真的没有必要,并且可以实现一切使用Generic programming.这是来自Alexander Stepanov我正在观看的讲座是Alexander Stepanov:STL及其设计原则
我看到有人在讨论Scrap Your Boilerplate和Haskell中的泛型编程.这些术语是什么意思?我什么时候想要使用Scrap Your Boilerplate,我该如何使用它?
haskell functional-programming generic-programming scrap-your-boilerplate
模板专业化在代码中出现的顺序是否会改变程序的含义?如果是这样,为什么呢?
例:
在源代码中的某个地方
// specialization A
...
// specialization B
...
Run Code Online (Sandbox Code Playgroud)
与
// specialization B
...
// specialization A
...
Run Code Online (Sandbox Code Playgroud)
这会产生相同的结果吗?