def get_full_vname(namespaces: list, table_name: str, vname: str):
    """Generates the string that is the full variable name

    This full variable name is what is used in the C++ code across
    all of the different namespaces and if there's a table prefix.
    Putting it all here reduces repeated code.

    Parameters
    ----------
    namespaces : list
        The list of namespaces that belong to this parameter.
    table_name : str
        The "table" name for this parameter. This is typically
        when there's a block of parameters that all use the same
        prefix. I.e. bssn::BH1_MASS and bssn::BH2_MASS can be defined
        in the template file in one table alone.
    vname : str
        The name of the variable (the key for the corresponding table)

    Returns
    -------
    str
        The output string of the full variable name
    """
    out_str = "::".join(namespaces)
    out_str += "::" + table_name + vname
    return out_str