On 8/14/06, yue_nicholas / hotmail.com <yue_nicholas / hotmail.com> wrote:
> HI,
>
>   I am writing an extension for Ruby in C++ and as I have more and more
> functions, I need to separate them into individual C++ source for
> easier maintenance in the long run.
>
>   From Programming Ruby, the section on Extending Ruby defines function
> as static, if I continue to use the static keyword and the functions
> are implemented in separate C++ source file, it would not be visible in
> the main ruby method registration file.
>
>   How significant is the static keyword when defining functions for use
> as Ruby extension?
>
>   I had a quick browse of the ruby-netcdf package and noticed that they
> do not prefix their function with the static keyword.
>
>   Anyone has advice?
>
> Cheers
>
>
>

As a general rule, I dislike exposing C++ as a library interface. I
prefer to write a light wrapper in C on top of the C++ functionality-
much easier to link with other code that way because you have much
more control over the names that the linker sees. Then, put the Ruby
wrapper on top of the C wrapper, and all of the Ruby extension
functions can be static, and it will all fit reasonably into one
source file (because the extension functions are only making calls to
another interface).

For an example, look at the extension code in EventMachine (under
branch version_0). The Ruby wrapper is in rubymain.cpp. The C wrapper
is in cmain.cpp. Everything else is C++.