Results 1  10
of
34
An Overview of the C++ Programming Language
, 1999
"... This overview of C++ presents the key design, programming, and languagetechnical concepts using examples to give the reader a feel for the language. C++ is a generalpurpose programming language with a bias towards systems programming that supports efficient lowlevel computation, data abstraction, ..."
Abstract

Cited by 1766 (15 self)
 Add to MetaCart
This overview of C++ presents the key design, programming, and languagetechnical concepts using examples to give the reader a feel for the language. C++ is a generalpurpose programming language with a bias towards systems programming that supports efficient lowlevel computation, data abstraction, objectoriented programming, and generic programming.
On the design of CGAL a computational geometry algorithms library
 SOFTW. – PRACT. EXP
, 1999
"... CGAL is a Computational Geometry Algorithms Library written in C++, which is being developed by research groups in Europe and Israel. The goal is to make the large body of geometric algorithms developed in the field of computational geometry available for industrial application. We discuss the major ..."
Abstract

Cited by 106 (15 self)
 Add to MetaCart
CGAL is a Computational Geometry Algorithms Library written in C++, which is being developed by research groups in Europe and Israel. The goal is to make the large body of geometric algorithms developed in the field of computational geometry available for industrial application. We discuss the major design goals for CGAL, which are correctness, flexibility, easeofuse, efficiency, and robustness, and present our approach to reach these goals. Generic programming using templates in C++ plays a central role in the architecture of CGAL. We give a short introduction to generic programming in C++, compare it to the objectoriented programming paradigm, and present examples where both paradigms are used effectively in CGAL. Moreover, we give an overview of the current structure of the CGALlibrary and consider software engineering aspects in the CGALproject.
An adaptable and extensible geometry kernel
 In Proc. Workshop on Algorithm Engineering
, 2001
"... ii ..."
(Show Context)
ConceptControlled Polymorphism
 In Frank Pfennig and Yannis Smaragdakis, editors, Generative Programming and Component Engineering, volume 2830 of LNCS
, 2003
"... Concepts  sets of abstractions related by common requirements  have a central role in generic programming. This paper proposes a general framework for using concepts to control polymorphism in different ways. First, concepts can be used to constrain parametric polymorphism, as exemplified by ..."
Abstract

Cited by 15 (5 self)
 Add to MetaCart
(Show Context)
Concepts  sets of abstractions related by common requirements  have a central role in generic programming. This paper proposes a general framework for using concepts to control polymorphism in different ways. First, concepts can be used to constrain parametric polymorphism, as exemplified by type classes in Haskell. Second, concepts can be used to provide finegrained control of function and operator overloading. Finally, generic functions can be overloaded (specialized) based on concepts, rather than simply on types. We describe aC ++ implementation of a new mechanism, which we call enable if , and its role in conceptcontrolled polymorphism.
Design Patterns for Generic Programming in C++
 In Proceedings of the 6th USENIX Conference on ObjectOriented Technologies and Systems (COOTS’01
, 2001
"... Generic programming is a paradigm whose wide adoption by the C community is quite recent. In this scheme most classes and procedures are parameterized, leading to the construction of general and efficient software components. In this paper, we show how some design patterns from Gamma et al. can be a ..."
Abstract

Cited by 13 (2 self)
 Add to MetaCart
(Show Context)
Generic programming is a paradigm whose wide adoption by the C community is quite recent. In this scheme most classes and procedures are parameterized, leading to the construction of general and efficient software components. In this paper, we show how some design patterns from Gamma et al. can be adapted to this paradigm. Although these patterns rely highly on dynamic binding, we show that, by intensive use of parametric polymorphism, the method calls in these patterns can be resolved at compiletime. In intensive computations, the generic patterns bring a significant speedup compared to their classical peers.
A Type System for Computer Algebra
 Journal of Symbolic Computation
, 1994
"... ing RationalFun from Rational yields a higher order type operator that, given a specification, forms the type of objects that satisfy it. Philip Santas DeclareDomain := (Fun: Type?Category) +? (((Rep: Type) +? with(Rep,Fun(Rep))) SomeRep) The type of Rational objects can now be expressed by applyi ..."
Abstract

Cited by 12 (0 self)
 Add to MetaCart
ing RationalFun from Rational yields a higher order type operator that, given a specification, forms the type of objects that satisfy it. Philip Santas DeclareDomain := (Fun: Type?Category) +? (((Rep: Type) +? with(Rep,Fun(Rep))) SomeRep) The type of Rational objects can now be expressed by applying the DeclareDomain constructor to the specification RationalFun: Rational := DeclareDomain(RationalFun) or the shortcut: Rational : RationalFun In order to give proper treatment to the interaction between representations and subtyping, it is necessary to separate Rational into the specifications of its functions and the operators which capture the common structure of all object types. This separation is also important for the semantical construction of categories and the definition of the internal structures of the types. 2.1. Multiple Representations Rationals are created using the function box, which captures the semantics of dynamic objects in object oriented programming.A rational...
A static C++ objectoriented programming (SCOOP) paradigm mixing benefits of traditional OOP and generic programming
 IN PROCEEDINGS OF THE WORKSHOP ON MULTIPLE PARADIGM WITH OO LANGUAGES (MPOOL
, 2003
"... Objectoriented and generic programming are both supported in C++. The former provides high expressiveness whereas the latter leads to more efficient programs by avoiding dynamic typing. This paper presents SCOOP, a new paradigm which enables both classical objectoriented design and high performanc ..."
Abstract

Cited by 12 (1 self)
 Add to MetaCart
(Show Context)
Objectoriented and generic programming are both supported in C++. The former provides high expressiveness whereas the latter leads to more efficient programs by avoiding dynamic typing. This paper presents SCOOP, a new paradigm which enables both classical objectoriented design and high performance in C++ by mixing objectoriented programming and generic programming. We show how classical and advanced objectoriented features such as virtual methods, multiple inheritance, argument covariance, virtual types and multimethods can be implemented in a fully statically typed model, hence without runtime overhead.
The Iterative Solver Template Library
 Lecture Notes in Computer Science
, 2007
"... Abstract. The numerical solution of partial differential equations frequently requires the solution of large and sparse linear systems. Using generic programming techniques like in C++ one can create solver libraries that allow efficient realization of “fine grained interfaces”, i. e. with functions ..."
Abstract

Cited by 12 (4 self)
 Add to MetaCart
Abstract. The numerical solution of partial differential equations frequently requires the solution of large and sparse linear systems. Using generic programming techniques like in C++ one can create solver libraries that allow efficient realization of “fine grained interfaces”, i. e. with functions consisting only of a few lines, like access to individual matrix entries. This prevents code replication and allows programmers to work more efficiently. In this paper we present the “Iterative Solver Template Library ” (ISTL) which is part of the “Distributed and Unified Numerics Environment” (DUNE). It applies generic programming in C++ to the domain of iterative solvers of linear systems stemming from finite element discretizations. Those discretizations exhibit a lot of structure. Our matrix and vector interface supports a block recursive structure. I. E. each sparse matrix entry can be a sparse or a small dense matrix itself. Based on this interface we present efficient solvers that use the recursive block structure via template metaprogramming. 1
Towards a unified framework for scientific computing
 Domain Decomposition Methods in Science and Engineering, volume 40 of LNCSE
, 2005
"... Summary. Most finite element, or finite volume software is built around a fixed mesh data structure. Therefore, each software package can only be used efficiently for a relatively narrow class of applications. For example, implementations supporting unstructured meshes allow the approximation of com ..."
Abstract

Cited by 7 (5 self)
 Add to MetaCart
Summary. Most finite element, or finite volume software is built around a fixed mesh data structure. Therefore, each software package can only be used efficiently for a relatively narrow class of applications. For example, implementations supporting unstructured meshes allow the approximation of complex geometries but are in general much slower and require more memory than implementations using structured meshes. In this paper we show how a generic mesh interface can be defined such that one algorithm, e. g. a discretization scheme, works on different mesh implementations. For a cell centered finite volume scheme we show that the same algorithm runs thirty times faster on a structured mesh implementation than on an unstructured mesh and is only four times slower than a nongeneric version for a structured mesh. The generic mesh interface is realized within the Distributed Unified Numerics Environment DUNE. 1