[aspectc-user] introductions into sourcefiles

Olaf Spinczyk Olaf.Spinczyk at informatik.uni-erlangen.de
Thu Feb 2 09:17:28 CET 2006


Hi Martin,

the problem is the 'string' argument of your constructor, which is a 
template instance of basic_string. Without the --real-instances option 
ac++ is not able to connect the declaration and definition of the 
constructor. This is the main reason for the introduction problem.

On Linux you can simply use the --real-instances option and your example 
will work. On Windows there are still problems with parsing the STL 
header in the real-instances mode. Therefore, you have to use a 
workaround, e.g.

1) use char* instead of string
    - internally you can convert the char* back into a string object

2) let the constructor be an inline function

Please contact me if none of these workaround is acceptable for you.

Sorry for the inconvenience.

- Olaf


Olaf Spinczyk wrote:
> Hi Martin,
> 
> this problem is very strange. I can reproduce that the non-inline member 
> function is not woven. However, -v9 shows that the weaver at least tries 
> to insert the code.
> 
> I have a test program which works and we also use this feature in the 
> Puma library.
> 
> Somehow your example has to be different...
> 
> I'll continue to look into it.
> 
> - Olaf
> 
> 
> Martin Kuhlemann wrote:
>> Hi Olaf,
>>
>> I appended an example.
>> When I comment out the non-default-constructor of "Client"...all works 
>> fine.
>>
>> Thank you.
>> Martin
>>
>> Olaf Spinczyk schrieb:
>>> Hi Martin,
>>>
>>> the mechanism works with any class, because the code is simply 
>>> inserted into the .cc and .h file of the target class. The only 
>>> condition is that there already has to be a .cc file for the class 
>>> that already contains the definition of at least one non-inline 
>>> member function or static attribute definition. Otherwise the weaver 
>>> would complain.
>>>
>>> If it still does not work, post  a simple example.
>>>
>>> - Olaf
>>>
>>>
>>> Martin Kuhlemann wrote:
>>>
>>>> Hello Olaf,
>>>>
>>>> thank you for your reply.
>>>> Is it possible, that this only works for classes with 
>>>> default-constructor?
>>>> (Otherwise I get a linker-error, because the method-body got lost.)
>>>>
>>>> Thank you and best Regards
>>>> Martin
>>>>
>>>> Olaf Spinczyk schrieb:
>>>>
>>>>> Hello Martin,
>>>>>
>>>>> here is an example:
>>>>>
>>>>> aspect Foo {
>>>>>   // introduction of the declaration into the class Body of Bar
>>>>>   advice "Bar": void func();
>>>>> };
>>>>>
>>>>> // introduction of the implementation, e.g. into Bar.cc
>>>>> advice "Bar" : void Foo::func() { ... }
>>>>>
>>>>> Note that the aspect name "Foo" in "Foo::func" will be replaced by 
>>>>> the target class name "Bar" in the generated code.
>>>>>
>>>>> These "non-inline function introductions" only work if the target 
>>>>> class already has a non-inline member function or a static data 
>>>>> member, because the introduced non-inline function will be inserted 
>>>>> into the same translation unit. If there is no such member, ac++ 
>>>>> will stop with an error message.
>>>>>
>>>>> It is rather likely that the *syntax* of non-inline introductions 
>>>>> will change in one of the next ac++ releases. However, the feature 
>>>>> will remain.
>>>>>
>>>>> - Olaf
>>>>>
>>>>>
>>>>> Martin Kuhlemann wrote:
>>>>>
>>>>>> Hello,
>>>>>>
>>>>>> is there a way to force AspectC++ to divide method-introductions 
>>>>>> into header and sourcefile?
>>>>>> My code is only compilable by the C++-compiler after I manually 
>>>>>> put the introduced methods from the headerfile into the cc-file.
>>>>>>
>>>>>> Thank you and best Regards.
>>>>>> Martin
>>>>>> _______________________________________________
>>>>>> aspectc-user mailing list
>>>>>> aspectc-user at aspectc.org
>>>>>> http://www.aspectc.org/mailman/listinfo/aspectc-user
>>>>>
>>>>>
>>>>>
>>>>>
>>>> _______________________________________________
>>>> aspectc-user mailing list
>>>> aspectc-user at aspectc.org
>>>> http://www.aspectc.org/mailman/listinfo/aspectc-user
>>>
>>>
>>>
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> aspectc-user mailing list
>> aspectc-user at aspectc.org
>> http://www.aspectc.org/mailman/listinfo/aspectc-user
> 
> _______________________________________________
> aspectc-user mailing list
> aspectc-user at aspectc.org
> http://www.aspectc.org/mailman/listinfo/aspectc-user




More information about the aspectc-user mailing list