{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2025,6,19]],"date-time":"2025-06-19T04:41:41Z","timestamp":1750308101550,"version":"3.41.0"},"reference-count":25,"publisher":"Association for Computing Machinery (ACM)","issue":"4","license":[{"start":{"date-parts":[[2005,5,21]],"date-time":"2005-05-21T00:00:00Z","timestamp":1116633600000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/www.acm.org\/publications\/policies\/copyright_policy#Background"}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["SIGSOFT Softw. Eng. Notes"],"published-print":{"date-parts":[[2005,7]]},"abstract":"<jats:p>This paper describes TRAP\/C++, a software tool that enables new adaptable behavior to be added to existing C++ programs in a transparent fashion. In previous investigations, we used an aspect-oriented approach to manually define aspects for adaptation infrastructure, which were woven into the original application code at compile time. In follow-on work, we developed TRAP, a transparent shaping technique for automatically generating adaptation aspects, where TRAP\/J is a specific instantiation of TRAP. This paper presents our work into building TRAP\/C++, which was intended to be a port of TRAP\/J into C++. Designing TRAP\/C++ required us to overcome two major hurdles: lack of reflection in C++ and the incompatibility between the management of objects in C++ and the aspect weaving technique used in TRAP\/J. We used generative programming methods to produce two tools, TrapGen and TrapCC, that work together to produce the desired TRAP\/C++ functionality. Details of the TRAP\/C++ architecture and operation are presented, which we illustrate with a description of a case study that adds dynamic auditing capabilities to an existing distributed C++ application.<\/jats:p>","DOI":"10.1145\/1082983.1083089","type":"journal-article","created":{"date-parts":[[2005,11,7]],"date-time":"2005-11-07T19:28:32Z","timestamp":1131391712000},"page":"1-7","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":1,"title":["An approach to implementing dynamic adaptation in C++"],"prefix":"10.1145","volume":"30","author":[{"given":"Scott D.","family":"Fleming","sequence":"first","affiliation":[{"name":"Michigan State University, East Lansing, Michigan"}]},{"given":"Betty H. C.","family":"Cheng","sequence":"additional","affiliation":[{"name":"Michigan State University, East Lansing, Michigan"}]},{"given":"R. E. Kurt","family":"Stirewalt","sequence":"additional","affiliation":[{"name":"Michigan State University, East Lansing, Michigan"}]},{"given":"Philip K.","family":"McKinley","sequence":"additional","affiliation":[{"name":"Michigan State University, East Lansing, Michigan"}]}],"member":"320","published-online":{"date-parts":[[2005,5,21]]},"reference":[{"key":"e_1_2_1_1_1","doi-asserted-by":"publisher","DOI":"10.1145\/384197.384229"},{"key":"e_1_2_1_2_1","doi-asserted-by":"publisher","DOI":"10.5555\/646150.679210"},{"key":"e_1_2_1_3_1","doi-asserted-by":"publisher","DOI":"10.1109\/NOSDAV.1997.629391"},{"key":"e_1_2_1_4_1","doi-asserted-by":"publisher","DOI":"10.1145\/217838.217868"},{"key":"e_1_2_1_5_1","doi-asserted-by":"publisher","DOI":"10.5555\/646151.679350"},{"volume-title":"Generative Programming: Methods, Tools, and Applications","year":"2000","author":"Czarnecki K.","key":"e_1_2_1_6_1"},{"volume-title":"OOPSLA Workshop on Advanced Separation of Concerns in Object-Oriented Systems","year":"2001","author":"David P. C.","key":"e_1_2_1_7_1"},{"key":"e_1_2_1_8_1","doi-asserted-by":"publisher","DOI":"10.5555\/646155.679693"},{"key":"e_1_2_1_9_1","doi-asserted-by":"publisher","DOI":"10.5555\/851042.857058"},{"key":"e_1_2_1_10_1","doi-asserted-by":"publisher","DOI":"10.1145\/74877.74910"},{"volume-title":"Design Patterns: Elements of Reusable Object-Oriented Software","year":"1995","author":"Gamma E.","key":"e_1_2_1_11_1"},{"key":"e_1_2_1_12_1","first-page":"1","volume-title":"OOPSLA Workshop on Reflective Programming in C++ and Java","author":"Golm M.","year":"1998"},{"key":"e_1_2_1_13_1","first-page":"65","volume-title":"USENIX Annual Technical Conf.","author":"Hjalmtysson G.","year":"1998"},{"key":"e_1_2_1_14_1","doi-asserted-by":"publisher","DOI":"10.5555\/646854.708208"},{"key":"e_1_2_1_15_1","doi-asserted-by":"publisher","DOI":"10.5555\/646158.680006"},{"key":"e_1_2_1_16_1","doi-asserted-by":"publisher","DOI":"10.1007\/BFb0053381"},{"key":"e_1_2_1_17_1","doi-asserted-by":"publisher","DOI":"10.1145\/38765.38821"},{"key":"e_1_2_1_18_1","doi-asserted-by":"publisher","DOI":"10.1109\/MC.2004.48"},{"volume-title":"Department of Computer Science","year":"2001","author":"Popovici A.","key":"e_1_2_1_20_1"},{"key":"e_1_2_1_21_1","doi-asserted-by":"publisher","DOI":"10.5555\/646159.680029"},{"key":"e_1_2_1_22_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-540-30469-2_28"},{"volume-title":"Proc. International Conference on Autonomic Computing (ICAC-04)","year":"2004","author":"Sadjadi S. M.","key":"e_1_2_1_23_1"},{"key":"e_1_2_1_24_1","doi-asserted-by":"publisher","DOI":"10.1145\/949305.949309"},{"key":"e_1_2_1_25_1","doi-asserted-by":"publisher","DOI":"10.5555\/646954.713484"},{"key":"e_1_2_1_26_1","doi-asserted-by":"publisher","DOI":"10.1145\/582128.582144"}],"container-title":["ACM SIGSOFT Software Engineering Notes"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/1082983.1083089","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/1082983.1083089","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,18]],"date-time":"2025-06-18T16:08:02Z","timestamp":1750262882000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/1082983.1083089"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2005,5,21]]},"references-count":25,"journal-issue":{"issue":"4","published-print":{"date-parts":[[2005,7]]}},"alternative-id":["10.1145\/1082983.1083089"],"URL":"https:\/\/doi.org\/10.1145\/1082983.1083089","relation":{"is-identical-to":[{"id-type":"doi","id":"10.1145\/1083063.1083089","asserted-by":"subject"}]},"ISSN":["0163-5948"],"issn-type":[{"type":"print","value":"0163-5948"}],"subject":[],"published":{"date-parts":[[2005,5,21]]},"assertion":[{"value":"2005-05-21","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}